From 6d9e6b3a80ef1406c16aeb42ebb786c0a1e5b4b0 Mon Sep 17 00:00:00 2001 From: Jon Leighton Date: Fri, 14 Sep 2012 17:54:27 +0100 Subject: [PATCH] Split Open into Real and Savepoint --- .../abstract/transaction.rb | 63 +++++++++++-------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb index 7f82b8f666926..a305480d9e9e9 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb @@ -15,7 +15,7 @@ def number end def begin - Open.new(connection, self) + Real.new(connection, self) end def closed? @@ -40,12 +40,6 @@ def initialize(connection, parent) @parent = parent @records = [] @finishing = false - - if parent.open? - connection.create_savepoint - else - connection.begin_db_transaction - end end def number @@ -65,33 +59,18 @@ def finishing? end def begin - Open.new(connection, self) + Savepoint.new(connection, self) end def rollback @finishing = true - - if parent.open? - connection.rollback_to_savepoint - else - connection.rollback_db_transaction - end - - rollback_records + perform_rollback parent end def commit @finishing = true - - if parent.open? - connection.release_savepoint - records.each { |r| parent.add_record(r) } - else - connection.commit_db_transaction - commit_records - end - + perform_commit parent end @@ -127,6 +106,40 @@ def open? true end end + + class Real < Open + def initialize(connection, parent) + super + connection.begin_db_transaction + end + + def perform_rollback + connection.rollback_db_transaction + rollback_records + end + + def perform_commit + connection.commit_db_transaction + commit_records + end + end + + class Savepoint < Open + def initialize(connection, parent) + super + connection.create_savepoint + end + + def perform_rollback + connection.rollback_to_savepoint + rollback_records + end + + def perform_commit + connection.release_savepoint + records.each { |r| parent.add_record(r) } + end + end end end end