aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb23
-rw-r--r--activerecord/lib/active_record/connection_handling.rb2
-rw-r--r--activerecord/test/cases/connection_adapters/connection_handler_test.rb13
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