summaryrefslogtreecommitdiff
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 14:22:27 -0500
commitfc8c2284e9f9e8d5d17ef35f282917a6833fafed (patch)
tree95d599385f1c121516b301d2c40ec1196545e04a
parent4c506730b5a8dae2ab9a16712db2f39c21d4385a (diff)
downloaddjango-fc8c2284e9f9e8d5d17ef35f282917a6833fafed.tar.gz
[2.1.x] 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. Backport of c8ffdbe514b55ff5c9a2b8cb8bbdf2d3978c188f from master.
-rw-r--r--django/db/backends/sqlite3/schema.py2
-rw-r--r--docs/releases/2.0.10.txt4
-rw-r--r--docs/releases/2.1.5.txt4
3 files changed, 10 insertions, 0 deletions
diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py
index b27d39d732..e0d8135cbd 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):
diff --git a/docs/releases/2.0.10.txt b/docs/releases/2.0.10.txt
index fd2e7f5ebf..ece2521867 100644
--- a/docs/releases/2.0.10.txt
+++ b/docs/releases/2.0.10.txt
@@ -12,3 +12,7 @@ Bugfixes
* Prevented repetitive calls to ``geos_version_tuple()`` in the ``WKBWriter``
class in an attempt to fix a random crash involving ``LooseVersion`` since
Django 2.0.6 (:ticket:`29959`).
+
+* Fixed a schema corruption issue on SQLite 3.26+. You might have to drop and
+ rebuild your SQLite database if you applied a migration while using an older
+ version of Django with SQLite 3.26 or later (:ticket:`29182`).
diff --git a/docs/releases/2.1.5.txt b/docs/releases/2.1.5.txt
index 25ec9fb804..9f1f3a4e8a 100644
--- a/docs/releases/2.1.5.txt
+++ b/docs/releases/2.1.5.txt
@@ -11,3 +11,7 @@ Bugfixes
========
* Fixed compatibility with mysqlclient 1.3.14 (:ticket:`30013`).
+
+* Fixed a schema corruption issue on SQLite 3.26+. You might have to drop and
+ rebuild your SQLite database if you applied a migration while using an older
+ version of Django with SQLite 3.26 or later (:ticket:`29182`).