diff --git a/lib/rdbi/database.rb b/lib/rdbi/database.rb index 7f1f990..72e4630 100644 --- a/lib/rdbi/database.rb +++ b/lib/rdbi/database.rb @@ -125,12 +125,15 @@ def disconnect # for you. # def transaction(&block) - @in_transaction += 1 + transaction_depth = (@in_transaction += 1) + begin yield self - self.commit if @in_transaction > 0 + # Only commit if user didn't already explicitly end the transaction + self.commit if @in_transaction == transaction_depth rescue => e - self.rollback + # Only rollback if user didn't already explicitly end the transaction + self.rollback if @in_transaction == transaction_depth raise e ensure @in_transaction -= 1 unless @in_transaction == 0