diff options
| author | Oleg <juravel2@gmail.com> | 2018-09-25 23:00:20 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-09-25 16:00:20 -0400 |
| commit | d1d5c97bc2821bf8c0f4b2d9c7ab16200845b494 (patch) | |
| tree | 47c5e14ad793a8b02c72b9d25142d2f2f38eecda | |
| parent | 8624459586c7916e0a5550ed03af60afa44cf387 (diff) | |
Fixed #29778 -- Fixed quoting of unique index names.
Regression in 3b429c96736b8328c40e5d77282b0d30de563c3c.
| -rw-r--r-- | django/db/backends/base/schema.py | 4 | ||||
| -rw-r--r-- | docs/releases/2.1.2.txt | 3 | ||||
| -rw-r--r-- | tests/schema/tests.py | 12 |
3 files changed, 18 insertions, 1 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index 663e03dafe..c9dff6b61f 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -1013,11 +1013,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') |
