aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2012-09-14 17:30:37 +0100
committerJon Leighton <j@jonathanleighton.com>2012-09-15 00:00:50 +0100
commit9296e6939bcc786149a07dac334267c4035b623a (patch)
treeb9ebfff4ef49c21d9af0663267b22771571cebcd /activerecord/lib/active_record/connection_adapters/abstract
parent02f25a226f6418f95d7ea1c62f68b2f8688ae37a (diff)
downloadrails-9296e6939bcc786149a07dac334267c4035b623a.tar.gz
rails-9296e6939bcc786149a07dac334267c4035b623a.tar.bz2
rails-9296e6939bcc786149a07dac334267c4035b623a.zip
Store the transaction number in the transaction object
This avoids us having to manually increment and decrement it.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb1
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/transaction.rb29
2 files changed, 24 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
index 7cfaf3b0e5..5eb0f0f132 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -198,7 +198,6 @@ module ActiveRecord
@transaction_joinable = last_transaction_joinable
if outside_transaction?
- @open_transactions = 0
@transaction = Transactions::Closed.new(self)
elsif @transaction.open? && transaction_open
begin
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
index 0a4649ffa7..4f1f9223ec 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
@@ -10,6 +10,10 @@ module ActiveRecord
end
class Closed < State
+ def number
+ 0
+ end
+
def begin
Open.new(connection, self)
end
@@ -33,16 +37,31 @@ module ActiveRecord
def initialize(connection, parent)
super connection
- @parent = parent
- @records = []
+ @parent = parent
+ @records = []
+ @finishing = false
if parent.open?
connection.create_savepoint
else
connection.begin_db_transaction
end
+ end
+
+ def number
+ if finishing?
+ parent.number
+ else
+ parent.number + 1
+ end
+ end
- connection.increment_open_transactions
+ # Database adapters expect that #open_transactions will be decremented
+ # before we've actually executed a COMMIT or ROLLBACK. This is kinda
+ # annoying, but for now we use this @finishing flag to toggle what value
+ # #number should return.
+ def finishing?
+ @finishing
end
def begin
@@ -50,7 +69,7 @@ module ActiveRecord
end
def rollback
- connection.decrement_open_transactions
+ @finishing = true
if parent.open?
connection.rollback_to_savepoint
@@ -63,7 +82,7 @@ module ActiveRecord
end
def commit
- connection.decrement_open_transactions
+ @finishing = true
begin
if parent.open?