aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2018-05-22 14:23:38 -0400
committerGitHub <noreply@github.com>2018-05-22 14:23:38 -0400
commit09f26ed9daa9f429746591b153eee6f68699413f (patch)
tree94968ad9a332461b3538cb9464de097bd1c0943d /activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
parentfa9d01d7ddbe18cabd31bcc86b6aa86ac02eff48 (diff)
parent45881b0a64b4039e3b0d27e2c4d959dc2d744b9d (diff)
downloadrails-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/active_record/connection_adapters/sqlite3_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb15
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