提交 2b285757 编写于 作者: J Jeremy Kemper

Reloading a model doesn't lose track of its connection. References #2996.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3182 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 52325f6b
*SVN*
* Reloading a model doesn't lose track of its connection. #2996 [junk@miriamtech.com, Jeremy Kemper]
* Fixed bug where using update_attribute after pushing a record to a habtm association of the object caused duplicate rows in the join table. #2888 [colman@rominato.com, Florian Weber]
* MySQL, PostgreSQL: reconnect! also reconfigures the connection. Otherwise, the connection 'loses' its settings if it times out and is reconnected. #2978 [Shugo Maeda]
......
......@@ -68,7 +68,7 @@ def self.establish_connection(spec = nil)
raise AdapterNotSpecified unless defined? RAILS_ENV
establish_connection(RAILS_ENV)
when ConnectionSpecification
@@defined_connections[self] = spec
@@defined_connections[name] = spec
when Symbol, String
if configuration = configurations[spec.to_s]
establish_connection(configuration)
......@@ -101,11 +101,11 @@ def self.retrieve_connection #:nodoc:
klass = self
ar_super = ActiveRecord::Base.superclass
until klass == ar_super
if conn = active_connections[klass]
if conn = active_connections[klass.name]
# Validate the active connection before returning it.
conn.verify!
return conn
elsif conn = @@defined_connections[klass]
elsif conn = @@defined_connections[klass.name]
# Activate this connection specification.
klass.connection = conn
return self.connection
......@@ -119,7 +119,7 @@ def self.retrieve_connection #:nodoc:
def self.connected?
klass = self
until klass == ActiveRecord::Base.superclass
if active_connections[klass]
if active_connections[klass.name]
return true
else
klass = klass.superclass
......@@ -133,9 +133,9 @@ def self.connected?
# can be used as argument for establish_connection, for easy
# re-establishing of the connection.
def self.remove_connection(klass=self)
conn = @@defined_connections[klass]
@@defined_connections.delete(klass)
active_connections[klass] = nil
conn = @@defined_connections[klass.name]
@@defined_connections.delete(klass.name)
active_connections[klass.name] = nil
@connection = nil
conn.config if conn
end
......@@ -143,7 +143,7 @@ def self.remove_connection(klass=self)
# Set the connection for the class.
def self.connection=(spec)
if spec.kind_of?(ActiveRecord::ConnectionAdapters::AbstractAdapter)
active_connections[self] = spec
active_connections[name] = spec
elsif spec.kind_of?(ConnectionSpecification)
self.connection = self.send(spec.adapter_method, spec.config)
elsif spec.nil?
......
print "Using native DB2\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native Firebird\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native MySQL\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using OCI Oracle\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new STDOUT
......
print "Using native PostgreSQL\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native SQlite\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native SQLite3\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native SQLite3\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native SQLServer\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
print "Using native SQLServer via ODBC\n"
require 'fixtures/course'
require_dependency 'fixtures/course'
require 'logger'
ActiveRecord::Base.logger = Logger.new("debug.log")
......
require 'abstract_unit'
require 'fixtures/course'
require 'fixtures/entrant'
# So we can test whether Course.connection survives a reload.
require_dependency 'fixtures/course'
class MultipleDbTest < Test::Unit::TestCase
self.use_transactional_fixtures = false
......@@ -45,4 +47,14 @@ def test_associations
e3 = Entrant.find(3)
assert_equal e3.course.id, c2.id
end
def test_course_connection_should_survive_dependency_reload
assert Course.connection
Dependencies.clear
Object.send(:remove_const, :Course)
require_dependency 'fixtures/course'
assert Course.connection
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册