aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/tasks/database_tasks.rb
diff options
context:
space:
mode:
authorBogdan <bogdanvlviv@gmail.com>2019-03-05 00:57:38 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2019-03-04 14:57:38 -0800
commita8c0ebccbdbf4e2ccbacbf94cba6cf24699af190 (patch)
tree0767c1a1138c4a670384fc8bc6a1e3ac7b23e879 /activerecord/lib/active_record/tasks/database_tasks.rb
parent076e8eddf4766a27a62fd0ae087c6c08501ddc42 (diff)
downloadrails-a8c0ebccbdbf4e2ccbacbf94cba6cf24699af190.tar.gz
rails-a8c0ebccbdbf4e2ccbacbf94cba6cf24699af190.tar.bz2
rails-a8c0ebccbdbf4e2ccbacbf94cba6cf24699af190.zip
Allow `truncate` for SQLite3 adapter and add `rails db:seed:replant` (#34779)
* Add `ActiveRecord::Base.connection.truncate` for SQLite3 adapter. SQLite doesn't support `TRUNCATE TABLE`, but SQLite3 adapter can support `ActiveRecord::Base.connection.truncate` by using `DELETE FROM`. `DELETE` without `WHERE` uses "The Truncate Optimization", see https://www.sqlite.org/lang_delete.html. * Add `rails db:seed:replant` that truncates database tables and loads the seeds Closes #34765
Diffstat (limited to 'activerecord/lib/active_record/tasks/database_tasks.rb')
-rw-r--r--activerecord/lib/active_record/tasks/database_tasks.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb
index 27e401a756..ef02ca8190 100644
--- a/activerecord/lib/active_record/tasks/database_tasks.rb
+++ b/activerecord/lib/active_record/tasks/database_tasks.rb
@@ -182,6 +182,24 @@ module ActiveRecord
}
end
+ def truncate_tables(configuration)
+ ActiveRecord::Base.connected_to(database: { truncation: configuration }) do
+ table_names = ActiveRecord::Base.connection.tables
+ internal_table_names = [
+ ActiveRecord::Base.schema_migrations_table_name,
+ ActiveRecord::Base.internal_metadata_table_name
+ ]
+
+ class_for_adapter(configuration["adapter"]).new(configuration).truncate_tables(*table_names.without(*internal_table_names))
+ end
+ end
+
+ def truncate_all(environment = env)
+ ActiveRecord::Base.configurations.configs_for(env_name: environment).each do |db_config|
+ truncate_tables db_config.config
+ end
+ end
+
def migrate
check_target_version