mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix PostgreSQL unit test failures that only occur when using the old 'postgres' driver.
[#1748 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
parent
b281a6a5b2
commit
9bcf01b23c
3 changed files with 13 additions and 12 deletions
|
@ -89,7 +89,7 @@ module ActiveRecord
|
||||||
# - The block will be run without doing anything. All database statements
|
# - The block will be run without doing anything. All database statements
|
||||||
# that happen within the block are effectively appended to the already
|
# that happen within the block are effectively appended to the already
|
||||||
# open database transaction.
|
# open database transaction.
|
||||||
# - However, if +requires_new+ is set, the block will be wrapped in a
|
# - However, if +:requires_new+ is set, the block will be wrapped in a
|
||||||
# database savepoint acting as a sub-transaction.
|
# database savepoint acting as a sub-transaction.
|
||||||
#
|
#
|
||||||
# === Caveats
|
# === Caveats
|
||||||
|
@ -113,8 +113,12 @@ module ActiveRecord
|
||||||
def transaction(options = {})
|
def transaction(options = {})
|
||||||
options.assert_valid_keys :requires_new, :joinable
|
options.assert_valid_keys :requires_new, :joinable
|
||||||
|
|
||||||
last_transaction_joinable, @transaction_joinable =
|
last_transaction_joinable = @transaction_joinable
|
||||||
@transaction_joinable, options[:joinable] || true
|
if options.has_key?(:joinable)
|
||||||
|
@transaction_joinable = options[:joinable]
|
||||||
|
else
|
||||||
|
@transaction_joinable = true
|
||||||
|
end
|
||||||
requires_new = options[:requires_new] || !last_transaction_joinable
|
requires_new = options[:requires_new] || !last_transaction_joinable
|
||||||
|
|
||||||
transaction_open = false
|
transaction_open = false
|
||||||
|
@ -141,7 +145,7 @@ module ActiveRecord
|
||||||
rollback_to_savepoint
|
rollback_to_savepoint
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
raise unless database_transaction_rollback.is_a? ActiveRecord::Rollback
|
raise unless database_transaction_rollback.is_a?(ActiveRecord::Rollback)
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
@transaction_joinable = last_transaction_joinable
|
@transaction_joinable = last_transaction_joinable
|
||||||
|
|
|
@ -533,13 +533,11 @@ module ActiveRecord
|
||||||
execute "ROLLBACK"
|
execute "ROLLBACK"
|
||||||
end
|
end
|
||||||
|
|
||||||
if PGconn.public_method_defined?(:transaction_status)
|
if defined?(PGconn::PQTRANS_IDLE)
|
||||||
# ruby-pg defines Ruby constants for transaction status,
|
# The ruby-pg driver supports inspecting the transaction status,
|
||||||
# ruby-postgres does not.
|
# while the ruby-postgres driver does not.
|
||||||
PQTRANS_IDLE = defined?(PGconn::PQTRANS_IDLE) ? PGconn::PQTRANS_IDLE : 0
|
|
||||||
|
|
||||||
def outside_transaction?
|
def outside_transaction?
|
||||||
@connection.transaction_status == PQTRANS_IDLE
|
@connection.transaction_status == PGconn::PQTRANS_IDLE
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -321,9 +321,8 @@ class TransactionTest < ActiveRecord::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if current_adapter?(:PostgreSQLAdapter) && PGconn.public_method_defined?(:transaction_status)
|
if current_adapter?(:PostgreSQLAdapter) && defined?(PGconn::PQTRANS_IDLE)
|
||||||
def test_outside_transaction_works
|
def test_outside_transaction_works
|
||||||
Topic.logger.info("-------------")
|
|
||||||
assert Topic.connection.outside_transaction?
|
assert Topic.connection.outside_transaction?
|
||||||
Topic.connection.begin_db_transaction
|
Topic.connection.begin_db_transaction
|
||||||
assert !Topic.connection.outside_transaction?
|
assert !Topic.connection.outside_transaction?
|
||||||
|
|
Loading…
Reference in a new issue