提交 0150a212 编写于 作者: K kennyj

Add db:schema:cache:dump and db:schema:cache:clear tasks.

上级 5ca4fc95
......@@ -21,6 +21,15 @@ def table_exists?(name)
@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 @@ def test_rake_dump_structure_should_respect_db_structure_env_variable
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册