summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Ljungberg <hannes@5monkeys.se>2019-11-07 21:26:08 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-11-08 08:52:47 +0100
commit6d590bcf1ff1d66990d03f8ee288e18110bdd995 (patch)
treef262b13fcb381e77cabe889c4bfc18d5e5af2b13
parentd5af43c8d1de7bc21e6e01f31e711c02a5059a5a (diff)
Fixed #30961 -- Fixed spaces in columns list SQL generated for indexes.
-rw-r--r--django/db/backends/ddl_references.py12
-rw-r--r--tests/indexes/tests.py20
2 files changed, 29 insertions, 3 deletions
diff --git a/django/db/backends/ddl_references.py b/django/db/backends/ddl_references.py
index 44e49806f8..ba55de1df8 100644
--- a/django/db/backends/ddl_references.py
+++ b/django/db/backends/ddl_references.py
@@ -83,10 +83,14 @@ class Columns(TableColumns):
def __str__(self):
def col_str(column, idx):
+ col = self.quote_name(column)
try:
- return self.quote_name(column) + self.col_suffixes[idx]
+ suffix = self.col_suffixes[idx]
+ if suffix:
+ col = '{} {}'.format(col, suffix)
except IndexError:
- return self.quote_name(column)
+ pass
+ return col
return ', '.join(col_str(column, idx) for idx, column in enumerate(self.columns))
@@ -114,7 +118,9 @@ class IndexColumns(Columns):
# length as self.columns.
col = '{} {}'.format(self.quote_name(column), self.opclasses[idx])
try:
- col = '{} {}'.format(col, self.col_suffixes[idx])
+ suffix = self.col_suffixes[idx]
+ if suffix:
+ col = '{} {}'.format(col, suffix)
except IndexError:
pass
return col
diff --git a/tests/indexes/tests.py b/tests/indexes/tests.py
index 799146d6a8..04ab036139 100644
--- a/tests/indexes/tests.py
+++ b/tests/indexes/tests.py
@@ -83,6 +83,14 @@ class SchemaIndexesTests(TestCase):
str(index.create_sql(Article, editor)),
)
+ def test_descending_columns_list_sql(self):
+ index = Index(fields=['-headline'], name='whitespace_idx')
+ editor = connection.schema_editor()
+ self.assertIn(
+ '(%s DESC)' % editor.quote_name('headline'),
+ str(index.create_sql(Article, editor)),
+ )
+
@skipIf(connection.vendor == 'postgresql', 'opclasses are PostgreSQL only')
class SchemaIndexesNotPostgreSQLTests(TransactionTestCase):
@@ -231,6 +239,18 @@ class SchemaIndexesPostgreSQLTests(TransactionTestCase):
cursor.execute(self.get_opclass_query % indexname)
self.assertCountEqual(cursor.fetchall(), [('text_pattern_ops', indexname)])
+ def test_ops_class_columns_lists_sql(self):
+ index = Index(
+ fields=['headline'],
+ name='whitespace_idx',
+ opclasses=['text_pattern_ops'],
+ )
+ with connection.schema_editor() as editor:
+ self.assertIn(
+ '(%s text_pattern_ops)' % editor.quote_name('headline'),
+ str(index.create_sql(Article, editor)),
+ )
+
def test_ops_class_descending_columns_list_sql(self):
index = Index(
fields=['-headline'],