AbstractAdapter#close can be called to add the connection back to the

pool.
This commit is contained in:
Aaron Patterson
2011-11-29 14:40:37 -08:00
parent ce3d8d646a
commit 29d2040b29
3 changed files with 35 additions and 11 deletions

View File

@@ -275,6 +275,7 @@ module ActiveRecord
raise ConnectionNotEstablished unless @automatic_reconnect
c = new_connection
c.pool = self
@connections << c
c
end

View File

@@ -53,23 +53,25 @@ module ActiveRecord
define_callbacks :checkout, :checkin
attr_accessor :visitor
attr_accessor :visitor, :pool
attr_reader :schema_cache, :last_use, :in_use
alias :in_use? :in_use
def initialize(connection, logger = nil) #:nodoc:
def initialize(connection, logger = nil, pool = nil) #:nodoc:
super()
@active = nil
@connection, @logger = connection, logger
@active = nil
@connection = connection
@in_use = false
@instrumenter = ActiveSupport::Notifications.instrumenter
@last_use = false
@logger = logger
@open_transactions = 0
@pool = pool
@query_cache = Hash.new { |h,sql| h[sql] = {} }
@query_cache_enabled = false
@query_cache = Hash.new { |h,sql| h[sql] = {} }
@open_transactions = 0
@instrumenter = ActiveSupport::Notifications.instrumenter
@visitor = nil
@schema_cache = SchemaCache.new self
@in_use = false
@last_use = false
@schema_cache = SchemaCache.new self
@visitor = nil
end
def lease
@@ -256,6 +258,11 @@ module ActiveRecord
"active_record_#{open_transactions}"
end
# Check the connection back in to the connection pool
def close
pool.checkin self
end
protected
def log(sql, name = "SQL", binds = [])

View File

@@ -33,6 +33,22 @@ module ActiveRecord
adapter.expire
assert !adapter.in_use?, 'adapter is in use'
end
def test_close
pool = ConnectionPool.new(Base::ConnectionSpecification.new({}, nil))
pool.connections << adapter
adapter.pool = pool
# Make sure the pool marks the connection in use
assert_equal adapter, pool.connection
assert adapter.in_use?
# Close should put the adapter back in the pool
adapter.close
assert !adapter.in_use?
assert_equal adapter, pool.connection
end
end
end
end