From c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Thu, 6 Dec 2018 11:37:43 -0500 Subject: 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. --- django/db/backends/sqlite3/schema.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'django') 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): -- cgit v1.3