diff options
3 files changed, 18 insertions, 20 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb index 347d794fa3..1f731036c9 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb @@ -505,9 +505,9 @@ module ActiveRecord @connection_pools[Process.pid] end - def establish_connection(name, spec) + def establish_connection(klass, spec) set_pool_for_spec spec, ConnectionAdapters::ConnectionPool.new(spec) - set_class_to_pool name, connection_pools[spec] + set_class_to_pool klass, connection_pools[spec] end # Returns true if there are any active connections among the connection @@ -553,7 +553,7 @@ module ActiveRecord # can be used as an argument for establish_connection, for easily # re-establishing the connection. def remove_connection(klass) - pool = class_to_pool.delete(klass.name) + pool = class_to_pool.delete(klass) return nil unless pool connection_pools.delete pool.spec @@ -563,12 +563,15 @@ module ActiveRecord end def retrieve_connection_pool(klass) - if !(klass < Model::Tag) - get_pool_for_class('ActiveRecord::Model') # default connection - else - pool = get_pool_for_class(klass.name) - pool || retrieve_connection_pool(klass.superclass) + pool = get_pool_for_class(klass) + + until pool + klass = klass.superclass + break unless klass < Model::Tag + pool = get_pool_for_class(klass) end + + pool || get_pool_for_class(ActiveRecord::Model) end private @@ -581,8 +584,8 @@ module ActiveRecord @connection_pools[Process.pid][spec] = pool end - def set_class_to_pool(name, pool) - @class_to_pool[Process.pid][name] = pool + def set_class_to_pool(klass, pool) + @class_to_pool[Process.pid][klass] = pool pool end diff --git a/activerecord/lib/active_record/connection_handling.rb b/activerecord/lib/active_record/connection_handling.rb index 7863c795ed..3531be05bf 100644 --- a/activerecord/lib/active_record/connection_handling.rb +++ b/activerecord/lib/active_record/connection_handling.rb @@ -44,7 +44,7 @@ module ActiveRecord end remove_connection - connection_handler.establish_connection name, spec + connection_handler.establish_connection self, spec end # Returns the connection currently associated with the class. This can diff --git a/activerecord/test/cases/connection_adapters/connection_handler_test.rb b/activerecord/test/cases/connection_adapters/connection_handler_test.rb index 17cb447105..2286ef1391 100644 --- a/activerecord/test/cases/connection_adapters/connection_handler_test.rb +++ b/activerecord/test/cases/connection_adapters/connection_handler_test.rb @@ -4,16 +4,11 @@ module ActiveRecord module ConnectionAdapters class ConnectionHandlerTest < ActiveRecord::TestCase def setup + @klass = Class.new { include Model::Tag } + @subklass = Class.new(@klass) { include Model::Tag } + @handler = ConnectionHandler.new - @handler.establish_connection 'america', Base.connection_pool.spec - @klass = Class.new do - include Model::Tag - def self.name; 'america'; end - end - @subklass = Class.new(@klass) do - include Model::Tag - def self.name; 'north america'; end - end + @handler.establish_connection @klass, Base.connection_pool.spec end def test_retrieve_connection |