# File lib/amalgalite/database.rb, line 617 def savepoint( name ) point_name = name.to_s.strip raise Amalgalite::Error, "Invalid savepoint name '#{name}'" unless point_name and point_name.length > 1 execute( "SAVEPOINT #{point_name};") if block_given? then begin return ( yield self ) ensure if $! then rollback_to( point_name ) raise $! else release( point_name ) end end else return in_transaction? end end