diff options
author | kennyj <kennyj@gmail.com> | 2012-03-01 01:01:12 +0900 |
---|---|---|
committer | kennyj <kennyj@gmail.com> | 2012-03-01 01:01:12 +0900 |
commit | 0150a212c068c6e4a580218913f44f278e086bd3 (patch) | |
tree | 10818848e9a5c3682f4f8c243d03536601e3671d /activerecord/lib | |
parent | 5ca4fc95818047108e69e22d200e7a4a22969477 (diff) | |
download | rails-0150a212c068c6e4a580218913f44f278e086bd3.tar.gz rails-0150a212c068c6e4a580218913f44f278e086bd3.tar.bz2 rails-0150a212c068c6e4a580218913f44f278e086bd3.zip |
Add db:schema:cache:dump and db:schema:cache:clear tasks.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/schema_cache.rb | 9 | ||||
-rw-r--r-- | activerecord/lib/active_record/railties/databases.rake | 19 |
2 files changed, 28 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb index fd0dbd7d78..cd8c5844a4 100644 --- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb @@ -21,6 +21,15 @@ module ActiveRecord @tables[name] = connection.table_exists?(name) end + # Add internal cache for table with +table_name+. + def add(table_name) + if table_exists?(table_name) + @primary_keys[table_name] + @columns[table_name] + @columns_hash[table_name] + end + end + # Clears out internal caches def clear! @columns.clear diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 14bb0a724e..5ab4b93c8b 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -372,6 +372,25 @@ db_namespace = namespace :db do task :load_if_ruby => 'db:create' do db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :ruby end + + namespace :cache do + desc 'Create a db/schema_cache.dump file.' + task :dump => :environment do + con = ActiveRecord::Base.connection + filename = File.join(Rails.application.config.paths["db"].first, "schema_cache.dump") + + con.schema_cache.clear! + con.tables.each { |table| con.schema_cache.add(table) } + open(filename, 'wb') { |f| f.write(Marshal.dump(con.schema_cache)) } + end + + desc 'Clear a db/schema_cache.dump file.' + task :clear => :environment do + filename = File.join(Rails.application.config.paths["db"].first, "schema_cache.dump") + FileUtils.rm(filename) if File.exists?(filename) + end + end + end namespace :structure do |