column cache now lives on the connection pool

This commit is contained in:
Aaron Patterson
2011-02-04 15:54:32 -08:00
parent c94651f8c8
commit acccb72cb1
3 changed files with 27 additions and 3 deletions

View File

@@ -57,6 +57,7 @@ module ActiveRecord
# * +wait_timeout+: number of seconds to block and wait for a connection
# before giving up and raising a timeout error (default 5 seconds).
class ConnectionPool
attr_accessor :automatic_reconnect
attr_reader :spec, :connections
attr_reader :columns, :columns_hash, :primary_keys
@@ -82,6 +83,7 @@ module ActiveRecord
@connections = []
@checked_out = []
@automatic_reconnect = true
@columns = Hash.new do |h, table_name|
h[table_name] = with_connection do |conn|
@@ -281,6 +283,8 @@ module ActiveRecord
end
def checkout_new_connection
raise ConnectionNotEstablished unless @automatic_reconnect
c = new_connection
@connections << c
checkout_and_verify(c)
@@ -379,7 +383,7 @@ module ActiveRecord
pool = @connection_pools[klass.name]
return nil unless pool
@connection_pools.delete_if { |key, value| value == pool }
pool.automatic_reconnect = false
pool.disconnect!
pool.spec.config
end

View File

@@ -757,10 +757,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
david = Developer.find(1)
# clear cache possibly created by other tests
david.projects.reset_column_information
assert_queries(1) { david.projects.columns; david.projects.columns }
assert_queries(0) { david.projects.columns; david.projects.columns }
# and again to verify that reset_column_information clears the cache correctly
david.projects.reset_column_information
assert_queries(1) { david.projects.columns; david.projects.columns }
assert_queries(0) { david.projects.columns; david.projects.columns }
end
def test_attributes_are_being_set_when_initialized_from_habm_association_with_where_clause

View File

@@ -99,6 +99,26 @@ module ActiveRecord
end.join()
end
def test_automatic_reconnect=
pool = ConnectionPool.new ActiveRecord::Base.connection_pool.spec
assert pool.automatic_reconnect
assert pool.connection
pool.disconnect!
assert pool.connection
pool.disconnect!
pool.automatic_reconnect = false
assert_raises(ConnectionNotEstablished) do
pool.connection
end
assert_raises(ConnectionNotEstablished) do
pool.with_connection
end
end
end
end
end