mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
[2.1.x] Fixed #29778 -- Fixed quoting of unique index names.
Regression in 3b429c96736b8328c40e5d77282b0d30de563c3c. Backport of d1d5c97bc2821bf8c0f4b2d9c7ab16200845b494 from master.
This commit is contained in:
parent
f53ed7846b
commit
cdb8ee741d
@ -1000,11 +1000,13 @@ class BaseDatabaseSchemaEditor:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _create_unique_sql(self, model, columns):
|
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
|
table = model._meta.db_table
|
||||||
return Statement(
|
return Statement(
|
||||||
self.sql_create_unique,
|
self.sql_create_unique,
|
||||||
table=Table(table, self.quote_name),
|
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),
|
columns=Columns(table, columns, self.quote_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,3 +19,6 @@ Bugfixes
|
|||||||
(:ticket:`29755`).
|
(:ticket:`29755`).
|
||||||
|
|
||||||
* Added compatibility for ``cx_Oracle`` 7 (:ticket:`29759`).
|
* Added compatibility for ``cx_Oracle`` 7 (:ticket:`29759`).
|
||||||
|
|
||||||
|
* Fixed a regression in Django 2.0 where unique index names weren't quoted
|
||||||
|
(:ticket:`29778`).
|
||||||
|
@ -1558,6 +1558,18 @@ class SchemaTests(TransactionTestCase):
|
|||||||
TagUniqueRename.objects.create(title="bar", slug2="foo")
|
TagUniqueRename.objects.create(title="bar", slug2="foo")
|
||||||
Tag.objects.all().delete()
|
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')
|
@isolate_apps('schema')
|
||||||
@unittest.skipIf(connection.vendor == 'sqlite', 'SQLite naively remakes the table on field alteration.')
|
@unittest.skipIf(connection.vendor == 'sqlite', 'SQLite naively remakes the table on field alteration.')
|
||||||
@skipUnlessDBFeature('supports_foreign_keys')
|
@skipUnlessDBFeature('supports_foreign_keys')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user