aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb8
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_adapter.rb23
2 files changed, 25 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 4e1f0e1d62..11e4d34de2 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -193,7 +193,8 @@ module ActiveRecord
rescue Exception => database_transaction_rollback
if transaction_open && !outside_transaction?
transaction_open = false
- decrement_open_transactions
+ txn = decrement_open_transactions
+ txn.aborted!
if open_transactions == 0
rollback_db_transaction
rollback_transaction_records(true)
@@ -208,9 +209,10 @@ module ActiveRecord
@transaction_joinable = last_transaction_joinable
if outside_transaction?
- @open_transactions = 0
+ @current_transaction = nil
elsif transaction_open
- decrement_open_transactions
+ txn = decrement_open_transactions
+ txn.committed!
begin
if open_transactions == 0
commit_db_transaction
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
index b3f9187429..27700e4fd2 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -69,6 +69,7 @@ module ActiveRecord
@last_use = false
@logger = logger
@open_transactions = 0
+ @current_transaction = nil
@pool = pool
@query_cache = Hash.new { |h,sql| h[sql] = {} }
@query_cache_enabled = false
@@ -236,14 +237,30 @@ module ActiveRecord
@connection
end
- attr_reader :open_transactions
+ def open_transactions
+ count = 0
+ txn = current_transaction
+
+ while txn
+ count += 1
+ txn = txn.next
+ end
+
+ count
+ end
+
+ attr_reader :current_transaction
def increment_open_transactions
- @open_transactions += 1
+ @current_transaction = Transaction.new(current_transaction)
end
def decrement_open_transactions
- @open_transactions -= 1
+ return unless current_transaction
+
+ txn = current_transaction
+ @current_transaction = txn.next
+ txn
end
def transaction_joinable=(joinable)