summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2018-12-06 11:37:43 -0500
committerTim Graham <timograham@gmail.com>2018-12-07 13:32:37 -0500
commitc8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f (patch)
tree4cd834dbf53f7a8e5ce893d09430f227f7b70429 /django/db
parent79c196cfb287893aadc6b0e74603ffde1512170e (diff)
Fixed #29182 -- Fixed schema table alteration on SQLite 3.26+.
SQLite 3.26 repoints foreign key constraints on table renames even when foreign_keys pragma is off which breaks every operation that requires a table rebuild to simulate unsupported ALTER TABLE statements. The newly introduced legacy_alter_table pragma disables this behavior and restores the previous schema editor assumptions. Thanks Florian Apolloner, Christoph Trassl, Chris Lamb for the report and troubleshooting assistance.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/backends/sqlite3/schema.py2
1 files changed, 2 insertions, 0 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index ad22d03763..255f80dd18 100644
--- a/django/db/backends/sqlite3/schema.py
+++ b/django/db/backends/sqlite3/schema.py
@@ -21,10 +21,12 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
# Some SQLite schema alterations need foreign key constraints to be
# disabled. Enforce it here for the duration of the transaction.
self.connection.disable_constraint_checking()
+ self.connection.cursor().execute('PRAGMA legacy_alter_table = ON')
return super().__enter__()
def __exit__(self, exc_type, exc_value, traceback):
super().__exit__(exc_type, exc_value, traceback)
+ self.connection.cursor().execute('PRAGMA legacy_alter_table = OFF')
self.connection.enable_constraint_checking()
def quote_value(self, value):