summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg <juravel2@gmail.com>2018-09-25 23:00:20 +0300
committerTim Graham <timograham@gmail.com>2018-09-25 16:10:47 -0400
commitcdb8ee741d0bc72713baf6612e4218d44cfd3958 (patch)
tree0a23f50164600a73a772a47dd86d80b2fc077129
parentf53ed7846bc5ed305ae5547af6e504d0deeafd05 (diff)
downloaddjango-cdb8ee741d0bc72713baf6612e4218d44cfd3958.tar.gz
[2.1.x] Fixed #29778 -- Fixed quoting of unique index names.
Regression in 3b429c96736b8328c40e5d77282b0d30de563c3c. Backport of d1d5c97bc2821bf8c0f4b2d9c7ab16200845b494 from master.
-rw-r--r--django/db/backends/base/schema.py4
-rw-r--r--docs/releases/2.1.2.txt3
-rw-r--r--tests/schema/tests.py12
3 files changed, 18 insertions, 1 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index a722e497c3..82d6fafc75 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -1000,11 +1000,13 @@ class BaseDatabaseSchemaEditor:
)
def _create_unique_sql(self, model, columns):
+ def create_unique_name(*args, **kwargs):
+ return self.quote_name(self._create_index_name(*args, **kwargs))
table = model._meta.db_table
return Statement(
self.sql_create_unique,
table=Table(table, self.quote_name),
- name=IndexName(table, columns, '_uniq', self._create_index_name),
+ name=IndexName(table, columns, '_uniq', create_unique_name),
columns=Columns(table, columns, self.quote_name),
)
diff --git a/docs/releases/2.1.2.txt b/docs/releases/2.1.2.txt
index 3118df77ae..3651440bc6 100644
--- a/docs/releases/2.1.2.txt
+++ b/docs/releases/2.1.2.txt
@@ -19,3 +19,6 @@ Bugfixes
(:ticket:`29755`).
* Added compatibility for ``cx_Oracle`` 7 (:ticket:`29759`).
+
+* Fixed a regression in Django 2.0 where unique index names weren't quoted
+ (:ticket:`29778`).
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index f18b68d04d..245d4b0918 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -1558,6 +1558,18 @@ class SchemaTests(TransactionTestCase):
TagUniqueRename.objects.create(title="bar", slug2="foo")
Tag.objects.all().delete()
+ def test_unique_name_quoting(self):
+ old_table_name = TagUniqueRename._meta.db_table
+ try:
+ with connection.schema_editor() as editor:
+ editor.create_model(TagUniqueRename)
+ editor.alter_db_table(TagUniqueRename, old_table_name, 'unique-table')
+ TagUniqueRename._meta.db_table = 'unique-table'
+ # This fails if the unique index name isn't quoted.
+ editor.alter_unique_together(TagUniqueRename, [], (('title', 'slug2'),))
+ finally:
+ TagUniqueRename._meta.db_table = old_table_name
+
@isolate_apps('schema')
@unittest.skipIf(connection.vendor == 'sqlite', 'SQLite naively remakes the table on field alteration.')
@skipUnlessDBFeature('supports_foreign_keys')