Permalink
Browse files

column cache now lives on the connection pool

  • Loading branch information...
1 parent c94651f commit acccb72cb12ab55bb01c3dce32f54f4a59ebec6c @tenderlove tenderlove committed Feb 4, 2011
@@ -57,6 +57,7 @@ module ConnectionAdapters
# * +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 @@ def initialize(spec)
@connections = []
@checked_out = []
+ @automatic_reconnect = true
@columns = Hash.new do |h, table_name|
h[table_name] = with_connection do |conn|
@@ -281,6 +283,8 @@ def current_connection_id #:nodoc:
end
def checkout_new_connection
+ raise ConnectionNotEstablished unless @automatic_reconnect
+
c = new_connection
@connections << c
checkout_and_verify(c)
@@ -379,7 +383,7 @@ def remove_connection(klass)
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 @@ def test_caching_of_columns
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 @@ def test_checkout_behaviour
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

0 comments on commit acccb72

Please sign in to comment.