mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
column cache now lives on the connection pool
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user