Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Remove our use of #outside_transaction?

This method was first seen in 045713e,
and subsequently reimplemented in
fb2325e.

According to @jeremy, this is okay to remove. He thinks it was added
because at the time we didn't have much transaction state to keep track
of, and he viewed it as a hack for us to track it internally, thinking
it was better to ask the connection for the transaction state.

Over the years we have added more and more state to track, a lot of
which is impossible to ask the connection for. So it seems that this is
just a relic of the passed and we will just track the state internally
only.
  • Loading branch information...
commit 61951427903dbc0d92f6106ec5874025e2185056 1 parent 748052a
Jon Leighton jonleighton authored
40 activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb
View
@@ -107,20 +107,6 @@ def delete(arel, name = nil, binds = [])
exec_delete(to_sql(arel, binds), name, binds)
end
- # Checks whether there is currently no transaction active. This is done
- # by querying the database driver, and does not use the transaction
- # house-keeping information recorded by #increment_open_transactions and
- # friends.
- #
- # Returns true if there is no transaction active, false if there is a
- # transaction active, and nil if this information is unknown.
- #
- # Not all adapters supports transaction state introspection. Currently,
- # only the PostgreSQL adapter supports this.
- def outside_transaction?
- nil
- end
-
# Returns +true+ when the connection adapter supports prepared statement
# caching, otherwise returns +false+
def supports_statement_cache?
@@ -173,7 +159,7 @@ def transaction(options = {})
options.assert_valid_keys :requires_new, :joinable
if !options[:requires_new] && current_transaction.joinable?
- within_existing_transaction { yield }
+ yield
else
within_new_transaction(options) { yield }
end
@@ -185,27 +171,17 @@ def within_new_transaction(options = {}) #:nodoc:
begin_transaction(options)
yield
rescue Exception => error
- rollback_transaction unless outside_transaction?
+ rollback_transaction
raise
ensure
- if outside_transaction?
- reset_transaction
- else
- begin
- commit_transaction unless error
- rescue Exception => e
- rollback_transaction
- raise
- end
+ begin
+ commit_transaction unless error
+ rescue Exception => e
+ rollback_transaction
+ raise
end
end
- def within_existing_transaction #:nodoc:
- yield
- ensure
- reset_transaction if outside_transaction?
- end
-
def current_transaction #:nodoc:
@transaction
end
@@ -228,7 +204,7 @@ def rollback_transaction #:nodoc:
@transaction = @transaction.rollback
end
- def reset_transaction
+ def reset_transaction #:nodoc:
@transaction = ClosedTransaction.new(self)
end
6 activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb
View
@@ -1,3 +1,5 @@
+require 'active_support/deprecation'
+
module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter < AbstractAdapter
@@ -214,6 +216,10 @@ def rollback_db_transaction
end
def outside_transaction?
+ ActiveSupport::Deprecation.warn(
+ "#outside_transaction? is deprecated. This method was only really used " \
+ "internally, but you can use #transaction_open? instead."
+ )
@connection.transaction_status == PGconn::PQTRANS_IDLE
end
32 activerecord/test/cases/transactions_test.rb
View
@@ -349,7 +349,6 @@ def test_many_savepoints
def test_rollback_when_commit_raises
Topic.connection.expects(:begin_db_transaction)
Topic.connection.expects(:commit_db_transaction).raises('OH NOES')
- Topic.connection.expects(:outside_transaction?).returns(false)
Topic.connection.expects(:rollback_db_transaction)
assert_raise RuntimeError do
@@ -398,36 +397,11 @@ def test_restore_active_record_state_for_all_records_in_a_transaction
if current_adapter?(:PostgreSQLAdapter) && defined?(PGconn::PQTRANS_IDLE)
def test_outside_transaction_works
- assert Topic.connection.outside_transaction?
+ assert assert_deprecated { Topic.connection.outside_transaction? }
Topic.connection.begin_db_transaction
- assert !Topic.connection.outside_transaction?
+ assert assert_deprecated { !Topic.connection.outside_transaction? }
Topic.connection.rollback_db_transaction
- assert Topic.connection.outside_transaction?
- end
-
- def test_rollback_wont_be_executed_if_no_transaction_active
- assert_raise RuntimeError do
- Topic.transaction do
- Topic.connection.rollback_db_transaction
- Topic.connection.expects(:rollback_db_transaction).never
- raise "Rails doesn't scale!"
- end
- end
- end
-
- def test_open_transactions_count_is_reset_to_zero_if_no_transaction_active
- Topic.transaction do
- Topic.transaction do
- Topic.connection.rollback_db_transaction
- end
- assert_equal 0, Topic.connection.open_transactions
- end
- assert_equal 0, Topic.connection.open_transactions
-
- Topic.transaction do
- Topic.connection.rollback_db_transaction
- end
- assert_equal 0, Topic.connection.open_transactions
+ assert assert_deprecated { Topic.connection.outside_transaction? }
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.