1
0
Fork 0
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:
Hongli Lai (Phusion) 2009-01-13 16:01:44 +01:00 committed by Jeremy Kemper
parent b281a6a5b2
commit 9bcf01b23c
3 changed files with 13 additions and 12 deletions

View file

@ -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

View file

@ -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

View file

@ -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?