mirror of https://github.com/rails/rails
Add db:schema:cache:dump and db:schema:cache:clear tasks.
This commit is contained in:
parent
5ca4fc9581
commit
0150a212c0
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -138,5 +138,24 @@ module ApplicationTests
|
|||
end
|
||||
assert File.exists?(File.join(app_path, 'db', 'my_structure.sql'))
|
||||
end
|
||||
|
||||
def test_rake_dump_schema_cache
|
||||
Dir.chdir(app_path) do
|
||||
`rails generate model post title:string`
|
||||
`rails generate model product name:string`
|
||||
`bundle exec rake db:migrate`
|
||||
`bundle exec rake db:schema:cache:dump`
|
||||
end
|
||||
assert File.exists?(File.join(app_path, 'db', 'schema_cache.dump'))
|
||||
end
|
||||
|
||||
def test_rake_clear_schema_cache
|
||||
Dir.chdir(app_path) do
|
||||
`bundle exec rake db:schema:cache:dump`
|
||||
`bundle exec rake db:schema:cache:clear`
|
||||
end
|
||||
assert !File.exists?(File.join(app_path, 'db', 'schema_cache.dump'))
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue