aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
diff options
context:
space:
mode:
authorbrainopia <brainopia@evilmartians.com>2015-01-12 02:38:22 +0300
committerbrainopia <brainopia@evilmartians.com>2015-01-16 03:50:29 +0300
commiteb72e349b205c47a64faa5d6fe9f831aa7fdddf3 (patch)
tree7f4c2ff107dd4e723be8238d1803a2dfb98a7e0d /activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
parent090c5211ced7b728df6176d5c9fc7437c107beaf (diff)
downloadrails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.tar.gz
rails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.tar.bz2
rails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.zip
after_commit runs after transactions with non-joinable parents
after_commit callbacks run after committing a transaction whose parent is not `joinable?`: un-nested transactions, transactions within test cases, and transactions in `console --sandbox`.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/transaction.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/transaction.rb15
1 files changed, 11 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
index 7535e9147a..84e5386c20 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
@@ -142,7 +142,6 @@ module ActiveRecord
def commit
connection.commit_db_transaction
super
- commit_records
end
end
@@ -159,14 +158,22 @@ module ActiveRecord
else
SavepointTransaction.new(@connection, "active_record_#{@stack.size}", options)
end
+
@stack.push(transaction)
transaction
end
def commit_transaction
- transaction = @stack.pop
- transaction.commit
- transaction.records.each { |r| current_transaction.add_record(r) }
+ inner_transaction = @stack.pop
+ inner_transaction.commit
+
+ if current_transaction.joinable?
+ inner_transaction.records.each do |r|
+ current_transaction.add_record(r)
+ end
+ else
+ inner_transaction.commit_records
+ end
end
def rollback_transaction