diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2005-11-24 07:01:43 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2005-11-24 07:01:43 +0000 |
commit | 2b28575734f557ee61a7544e17bd3510eaa6d900 (patch) | |
tree | f488e4c413298f86a041ca8de3e87ccbb4f37101 /activerecord | |
parent | 52325f6bf868c5efa80fbcf06d139a31816251fb (diff) | |
download | rails-2b28575734f557ee61a7544e17bd3510eaa6d900.tar.gz rails-2b28575734f557ee61a7544e17bd3510eaa6d900.tar.bz2 rails-2b28575734f557ee61a7544e17bd3510eaa6d900.zip |
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
Diffstat (limited to 'activerecord')
13 files changed, 33 insertions, 19 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 07f4313632..18f0b4c16d 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *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] diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb index 5e70930a85..5ef200fd97 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb @@ -68,7 +68,7 @@ module ActiveRecord 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 @@ module ActiveRecord 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 @@ module ActiveRecord 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 @@ module ActiveRecord # 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 @@ module ActiveRecord # 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? diff --git a/activerecord/test/connections/native_db2/connection.rb b/activerecord/test/connections/native_db2/connection.rb index 47f323945a..aa736ccc85 100644 --- a/activerecord/test/connections/native_db2/connection.rb +++ b/activerecord/test/connections/native_db2/connection.rb @@ -1,5 +1,5 @@ print "Using native DB2\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_firebird/connection.rb b/activerecord/test/connections/native_firebird/connection.rb index 96baf38376..c861d952d3 100644 --- a/activerecord/test/connections/native_firebird/connection.rb +++ b/activerecord/test/connections/native_firebird/connection.rb @@ -1,5 +1,5 @@ print "Using native Firebird\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_mysql/connection.rb b/activerecord/test/connections/native_mysql/connection.rb index f1dd284b19..dea337567b 100644 --- a/activerecord/test/connections/native_mysql/connection.rb +++ b/activerecord/test/connections/native_mysql/connection.rb @@ -1,5 +1,5 @@ print "Using native MySQL\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_oci/connection.rb b/activerecord/test/connections/native_oci/connection.rb index 2d9006c231..0b1babb898 100644 --- a/activerecord/test/connections/native_oci/connection.rb +++ b/activerecord/test/connections/native_oci/connection.rb @@ -1,5 +1,5 @@ print "Using OCI Oracle\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new STDOUT diff --git a/activerecord/test/connections/native_postgresql/connection.rb b/activerecord/test/connections/native_postgresql/connection.rb index 4dedf74040..1bdff730b1 100644 --- a/activerecord/test/connections/native_postgresql/connection.rb +++ b/activerecord/test/connections/native_postgresql/connection.rb @@ -1,5 +1,5 @@ print "Using native PostgreSQL\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_sqlite/connection.rb b/activerecord/test/connections/native_sqlite/connection.rb index 6a08fc1f8e..ce3494fb7d 100644 --- a/activerecord/test/connections/native_sqlite/connection.rb +++ b/activerecord/test/connections/native_sqlite/connection.rb @@ -1,5 +1,5 @@ print "Using native SQlite\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_sqlite3/connection.rb b/activerecord/test/connections/native_sqlite3/connection.rb index 917f7129da..ab6686076f 100644 --- a/activerecord/test/connections/native_sqlite3/connection.rb +++ b/activerecord/test/connections/native_sqlite3/connection.rb @@ -1,5 +1,5 @@ print "Using native SQLite3\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_sqlite3/in_memory_connection.rb b/activerecord/test/connections/native_sqlite3/in_memory_connection.rb index 9e0414ba88..31b1597048 100644 --- a/activerecord/test/connections/native_sqlite3/in_memory_connection.rb +++ b/activerecord/test/connections/native_sqlite3/in_memory_connection.rb @@ -1,5 +1,5 @@ print "Using native SQLite3\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_sqlserver/connection.rb b/activerecord/test/connections/native_sqlserver/connection.rb index aa19fc7700..24658d7157 100644 --- a/activerecord/test/connections/native_sqlserver/connection.rb +++ b/activerecord/test/connections/native_sqlserver/connection.rb @@ -1,5 +1,5 @@ print "Using native SQLServer\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/connections/native_sqlserver_odbc/connection.rb b/activerecord/test/connections/native_sqlserver_odbc/connection.rb index b156a07920..918be3eda7 100644 --- a/activerecord/test/connections/native_sqlserver_odbc/connection.rb +++ b/activerecord/test/connections/native_sqlserver_odbc/connection.rb @@ -1,5 +1,5 @@ print "Using native SQLServer via ODBC\n" -require 'fixtures/course' +require_dependency 'fixtures/course' require 'logger' ActiveRecord::Base.logger = Logger.new("debug.log") diff --git a/activerecord/test/multiple_db_test.rb b/activerecord/test/multiple_db_test.rb index f888d587d0..df2ef10619 100644 --- a/activerecord/test/multiple_db_test.rb +++ b/activerecord/test/multiple_db_test.rb @@ -1,7 +1,9 @@ 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 @@ class MultipleDbTest < Test::Unit::TestCase 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 |