diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2018-05-22 14:23:38 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-22 14:23:38 -0400 |
commit | 09f26ed9daa9f429746591b153eee6f68699413f (patch) | |
tree | 94968ad9a332461b3538cb9464de097bd1c0943d /activerecord/lib | |
parent | fa9d01d7ddbe18cabd31bcc86b6aa86ac02eff48 (diff) | |
parent | 45881b0a64b4039e3b0d27e2c4d959dc2d744b9d (diff) | |
download | rails-09f26ed9daa9f429746591b153eee6f68699413f.tar.gz rails-09f26ed9daa9f429746591b153eee6f68699413f.tar.bz2 rails-09f26ed9daa9f429746591b153eee6f68699413f.zip |
Merge pull request #32865 from yahonda/another_31988
Disable foreign keys during `alter_table` for sqlite3 adapter
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index 32e2ed6fc6..544374586c 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -187,13 +187,16 @@ module ActiveRecord # REFERENTIAL INTEGRITY ==================================== def disable_referential_integrity # :nodoc: - old = query_value("PRAGMA foreign_keys") + old_foreign_keys = query_value("PRAGMA foreign_keys") + old_defer_foreign_keys = query_value("PRAGMA defer_foreign_keys") begin + execute("PRAGMA defer_foreign_keys = ON") execute("PRAGMA foreign_keys = OFF") yield ensure - execute("PRAGMA foreign_keys = #{old}") + execute("PRAGMA defer_foreign_keys = #{old_defer_foreign_keys}") + execute("PRAGMA foreign_keys = #{old_foreign_keys}") end end @@ -407,9 +410,11 @@ module ActiveRecord caller = lambda { |definition| yield definition if block_given? } transaction do - move_table(table_name, altered_table_name, - options.merge(temporary: true)) - move_table(altered_table_name, table_name, &caller) + disable_referential_integrity do + move_table(table_name, altered_table_name, + options.merge(temporary: true)) + move_table(altered_table_name, table_name, &caller) + end end end |