aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2017-01-01 22:55:49 -0500
committerGitHub <noreply@github.com>2017-01-01 22:55:49 -0500
commit2e621f6c911c75ed802c3ca8e07f5ea853bb057c (patch)
tree42dcbcf582da112ec626fc6bacf88d60059836db /activerecord
parentfadc0dc151e9e010cf5cfa0e05d4427eb1be321c (diff)
parent6cd757963d7f6b9bb33704c82bd9ee2bacaa1e28 (diff)
downloadrails-2e621f6c911c75ed802c3ca8e07f5ea853bb057c.tar.gz
rails-2e621f6c911c75ed802c3ca8e07f5ea853bb057c.tar.bz2
rails-2e621f6c911c75ed802c3ca8e07f5ea853bb057c.zip
Merge pull request #27526 from kirs/database-tasks-schema-cache
Dump schema cache for custom connection
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/railties/databases.rake5
-rw-r--r--activerecord/lib/active_record/tasks/database_tasks.rb10
-rw-r--r--activerecord/test/cases/tasks/database_tasks_test.rb10
3 files changed, 21 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake
index 25d79a6c7d..cf1c0fb423 100644
--- a/activerecord/lib/active_record/railties/databases.rake
+++ b/activerecord/lib/active_record/railties/databases.rake
@@ -269,10 +269,7 @@ db_namespace = namespace :db do
task dump: [:environment, :load_config] do
conn = ActiveRecord::Base.connection
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.yml")
-
- conn.schema_cache.clear!
- conn.data_sources.each { |table| conn.schema_cache.add(table) }
- open(filename, "wb") { |f| f.write(YAML.dump(conn.schema_cache)) }
+ ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(conn, filename)
end
desc "Clears a db/schema_cache.yml file."
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb
index 6f868b6b7e..1423e6008f 100644
--- a/activerecord/lib/active_record/tasks/database_tasks.rb
+++ b/activerecord/lib/active_record/tasks/database_tasks.rb
@@ -275,6 +275,16 @@ module ActiveRecord
end
end
+ # Dumps the schema cache in YAML format for the connection into the file
+ #
+ # ==== Examples:
+ # ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(ActiveRecord::Base.connection, "tmp/schema_dump.yaml")
+ def dump_schema_cache(conn, filename)
+ conn.schema_cache.clear!
+ conn.data_sources.each { |table| conn.schema_cache.add(table) }
+ open(filename, "wb") { |f| f.write(YAML.dump(conn.schema_cache)) }
+ end
+
private
def class_for_adapter(adapter)
diff --git a/activerecord/test/cases/tasks/database_tasks_test.rb b/activerecord/test/cases/tasks/database_tasks_test.rb
index 0c3ca41c9b..f7c53b5801 100644
--- a/activerecord/test/cases/tasks/database_tasks_test.rb
+++ b/activerecord/test/cases/tasks/database_tasks_test.rb
@@ -85,6 +85,16 @@ module ActiveRecord
end
end
+ class DatabaseTasksDumpSchemaCacheTest < ActiveRecord::TestCase
+ def test_dump_schema_cache
+ path = "/tmp/my_schema_cache.yml"
+ ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(ActiveRecord::Base.connection, path)
+ assert File.file?(path)
+ ensure
+ FileUtils.rm_rf(path)
+ end
+ end
+
class DatabaseTasksCreateAllTest < ActiveRecord::TestCase
def setup
@configurations = { "development" => { "database" => "my-db" } }