summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatalia <124304+nessita@users.noreply.github.com>2025-02-05 12:08:44 -0300
committernessita <124304+nessita@users.noreply.github.com>2025-02-05 20:15:39 -0300
commit1f33f21fca60c3839bcfc756900fb78bcfd15cc3 (patch)
tree06f39642ece522e7b908ce46fd775ef33bd0e821
parente2a8f4dac8ed2b3667a4367756043b1e119f4ce2 (diff)
Fixed #36165 -- Made PostgreSQL's SchemaEditor._delete_index_sql() respect the "sql" argument.
This is a follow up of bd366ca2aeffa869b7dbc0b0aa01caea75e6dc31. Thank you Daniel Finch for the report.
-rw-r--r--django/db/backends/postgresql/schema.py2
-rw-r--r--tests/postgres_tests/test_indexes.py24
2 files changed, 25 insertions, 1 deletions
diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py
index 964009988c..1d36696fd3 100644
--- a/django/db/backends/postgresql/schema.py
+++ b/django/db/backends/postgresql/schema.py
@@ -322,7 +322,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
self.execute(index.remove_sql(model, self, concurrently=concurrently))
def _delete_index_sql(self, model, name, sql=None, concurrently=False):
- sql = (
+ sql = sql or (
self.sql_delete_index_concurrently
if concurrently
else self.sql_delete_index
diff --git a/tests/postgres_tests/test_indexes.py b/tests/postgres_tests/test_indexes.py
index f98d03c6c1..7d1e182726 100644
--- a/tests/postgres_tests/test_indexes.py
+++ b/tests/postgres_tests/test_indexes.py
@@ -665,6 +665,30 @@ class SchemaTests(PostgreSQLTestCase):
str(index.create_sql(CharFieldModel, editor)),
)
+ def test_custom_sql(self):
+ class CustomSQLIndex(PostgresIndex):
+ sql_create_index = "SELECT 1"
+ sql_delete_index = "SELECT 2"
+
+ def create_sql(self, model, schema_editor, using="", **kwargs):
+ kwargs.setdefault("sql", self.sql_create_index)
+ return super().create_sql(model, schema_editor, using, **kwargs)
+
+ def remove_sql(self, model, schema_editor, **kwargs):
+ kwargs.setdefault("sql", self.sql_delete_index)
+ return super().remove_sql(model, schema_editor, **kwargs)
+
+ index = CustomSQLIndex(fields=["field"], name="custom_sql_idx")
+
+ operations = [
+ (index.create_sql, CustomSQLIndex.sql_create_index),
+ (index.remove_sql, CustomSQLIndex.sql_delete_index),
+ ]
+ for operation, expected in operations:
+ with self.subTest(operation=operation.__name__):
+ with connection.schema_editor() as editor:
+ self.assertEqual(expected, str(operation(CharFieldModel, editor)))
+
def test_op_class(self):
index_name = "test_op_class"
index = Index(