# File lib/amalgalite/database.rb, line 554 def transaction( mode = TransactionBehavior::DEFERRED, &block ) raise Amalgalite::Error, "Invalid transaction behavior mode #{mode}" unless TransactionBehavior.valid?( mode ) # if already in a transaction, no need to start a new one. if not in_transaction? then execute( "BEGIN #{mode} TRANSACTION" ) end if block_given? then begin previous_exception = $! return ( yield self ) ensure if $! and ($! != previous_exception) then rollback raise $! else commit end end else return in_transaction? end end