aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-02-03 15:35:34 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2011-02-03 15:35:44 -0800
commit7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd (patch)
treec0febaa28f316ba99e57a0899d316dc5e57f85d5 /activerecord
parent082326deb5ba7e78d4a51ef6b8783d668066ed23 (diff)
downloadrails-7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd.tar.gz
rails-7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd.tar.bz2
rails-7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd.zip
allow AR caches to be cleared, clear them on class reloading
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/base.rb6
-rw-r--r--activerecord/lib/active_record/railtie.rb1
-rw-r--r--activerecord/test/cases/base_test.rb8
3 files changed, 15 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index 8750e226b9..f8ae855e28 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -750,6 +750,12 @@ module ActiveRecord #:nodoc:
@arel_engine = @relation = nil
end
+ def clear_cache! # :nodoc:
+ @@columns.clear
+ @@columns_hash.clear
+ @@arel_tables.clear
+ end
+
def reset_column_cache # :nodoc:
@@columns.delete table_name
@@columns_hash.delete table_name
diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb
index 2accf0a48f..72687c9ca3 100644
--- a/activerecord/lib/active_record/railtie.rb
+++ b/activerecord/lib/active_record/railtie.rb
@@ -72,6 +72,7 @@ module ActiveRecord
ActiveSupport.on_load(:active_record) do
ActionDispatch::Reloader.to_cleanup do
ActiveRecord::Base.clear_reloadable_connections!
+ ActiveRecord::Base.clear_cache!
end
end
end
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index a255c07957..68adeff882 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -1553,6 +1553,14 @@ class BasicsTest < ActiveRecord::TestCase
end
end
+ def test_clear_cache!
+ # preheat cache
+ c1 = Post.columns
+ ActiveRecord::Base.clear_cache!
+ c2 = Post.columns
+ assert_not_equal c1, c2
+ end
+
def test_default_scope_is_reset
Object.const_set :UnloadablePost, Class.new(ActiveRecord::Base)
UnloadablePost.table_name = 'posts'