Skip to content

Commit

Permalink
column cache now lives on the connection pool
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Feb 5, 2011
1 parent c94651f commit acccb72
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
Expand Up @@ -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

Expand All @@ -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|
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions activerecord/test/cases/connection_pool_test.rb
Expand Up @@ -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.