Fixed #33607 -- Made PostgresIndex.create_sql() respect the "using" argument.

This commit is contained in:
Alexandru Mărășteanu 2022-04-15 23:00:28 +03:00 committed by GitHub
parent c72f6f36c1
commit a1e4e86f92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View File

@ -25,7 +25,7 @@ class PostgresIndex(Index):
def create_sql(self, model, schema_editor, using="", **kwargs):
self.check_supported(schema_editor)
statement = super().create_sql(
model, schema_editor, using=" USING %s" % self.suffix, **kwargs
model, schema_editor, using=" USING %s" % (using or self.suffix), **kwargs
)
with_params = self.get_with_params()
if with_params:

View File

@ -8,6 +8,7 @@ from django.contrib.postgres.indexes import (
GistIndex,
HashIndex,
OpClass,
PostgresIndex,
SpGistIndex,
)
from django.db import NotSupportedError, connection
@ -646,6 +647,21 @@ class SchemaTests(PostgreSQLTestCase):
editor.add_index(Scene, index)
self.assertNotIn(index_name, self.get_constraints(Scene._meta.db_table))
def test_custom_suffix(self):
class CustomSuffixIndex(PostgresIndex):
suffix = "sfx"
def create_sql(self, model, schema_editor, using="gin", **kwargs):
return super().create_sql(model, schema_editor, using=using, **kwargs)
index = CustomSuffixIndex(fields=["field"], name="custom_suffix_idx")
self.assertEqual(index.suffix, "sfx")
with connection.schema_editor() as editor:
self.assertIn(
" USING gin ",
str(index.create_sql(CharFieldModel, editor)),
)
def test_op_class(self):
index_name = "test_op_class"
index = Index(