aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2015-02-01 13:52:50 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2015-02-01 13:55:16 -0800
commitda8de9114b41618322dde17c35b891ade46751fe (patch)
tree801589fbaa9f58626b13c20652af4691379f49ba
parente87ff501932eb1baecafcca64518e3763597163e (diff)
downloadrails-da8de9114b41618322dde17c35b891ade46751fe.tar.gz
rails-da8de9114b41618322dde17c35b891ade46751fe.tar.bz2
rails-da8de9114b41618322dde17c35b891ade46751fe.zip
push add to transaction logic down to the instance
the transaction object shouldn't know so much about active record objects, so let's push the conditionals in to the instance.
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb4
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/transaction.rb6
-rw-r--r--activerecord/lib/active_record/transactions.rb6
3 files changed, 10 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 c3e5e9ad61..3b1e321f4b 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -234,6 +234,10 @@ module ActiveRecord
current_transaction.add_record(record)
end
+ def transaction_state
+ current_transaction.state
+ end
+
# Begins the transaction (and turns off auto-committing).
def begin_db_transaction() end
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
index 1252a33d7d..1eb30956d4 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
@@ -55,11 +55,7 @@ module ActiveRecord
end
def add_record(record)
- if record.has_transactional_callbacks?
- records << record
- else
- record.set_transaction_state(@state)
- end
+ records << record
end
def rollback
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb
index 99b3b5c245..609c395cb6 100644
--- a/activerecord/lib/active_record/transactions.rb
+++ b/activerecord/lib/active_record/transactions.rb
@@ -318,7 +318,11 @@ module ActiveRecord
# Add the record to the current transaction so that the +after_rollback+ and +after_commit+ callbacks
# can be called.
def add_to_transaction
- self.class.connection.add_transaction_record(self)
+ if has_transactional_callbacks?
+ self.class.connection.add_transaction_record(self)
+ else
+ set_transaction_state(self.class.connection.transaction_state)
+ end
remember_transaction_record_state
end