From dece89df81c30f917162b13277b71fca13d9a2a3 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Wed, 5 Apr 2023 20:32:46 +0200 Subject: [PATCH] [4.2.x] Moved SearchVectorIndexTests.test_search_vector_index to postgres_tests.test_indexes. Backport of 02a04ab79ae8c9e1aa10a91ee8b73fc5252a58e8 from main --- tests/postgres_tests/test_indexes.py | 15 +++++++++++++++ tests/postgres_tests/test_search.py | 21 --------------------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/tests/postgres_tests/test_indexes.py b/tests/postgres_tests/test_indexes.py index 52bfcbeb06..d063ac64a2 100644 --- a/tests/postgres_tests/test_indexes.py +++ b/tests/postgres_tests/test_indexes.py @@ -539,6 +539,21 @@ class SchemaTests(PostgreSQLTestCase): editor.remove_index(Scene, index) self.assertNotIn(index_name, self.get_constraints(table)) + def test_search_vector(self): + """SearchVector generates IMMUTABLE SQL in order to be indexable.""" + index_name = "test_search_vector" + index = Index(SearchVector("id", "scene", config="english"), name=index_name) + # Indexed function must be IMMUTABLE. + with connection.schema_editor() as editor: + editor.add_index(Scene, index) + constraints = self.get_constraints(Scene._meta.db_table) + self.assertIn(index_name, constraints) + self.assertIs(constraints[index_name]["index"], True) + + with connection.schema_editor() as editor: + editor.remove_index(Scene, index) + self.assertNotIn(index_name, self.get_constraints(Scene._meta.db_table)) + def test_hash_index(self): # Ensure the table is there and doesn't have an index. self.assertNotIn("field", self.get_constraints(CharFieldModel._meta.db_table)) diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py index 6ec20c0654..fa7d885221 100644 --- a/tests/postgres_tests/test_search.py +++ b/tests/postgres_tests/test_search.py @@ -5,7 +5,6 @@ These tests use dialogue from the 1975 film Monty Python and the Holy Grail. All text copyright Python (Monty) Pictures. Thanks to sacred-texts.com for the transcript. """ -from django.db import connection from django.db.models import F, Value from . import PostgreSQLSimpleTestCase, PostgreSQLTestCase @@ -609,26 +608,6 @@ class TestRankingAndWeights(GrailTestData, PostgreSQLTestCase): ) -class SearchVectorIndexTests(PostgreSQLTestCase): - def test_search_vector_index(self): - """SearchVector generates IMMUTABLE SQL in order to be indexable.""" - # This test should be moved to test_indexes and use a functional - # index instead once support lands (see #26167). - query = Line.objects.all().query - resolved = SearchVector("id", "dialogue", config="english").resolve_expression( - query - ) - compiler = query.get_compiler(connection.alias) - sql, params = resolved.as_sql(compiler, connection) - # Indexed function must be IMMUTABLE. - with connection.cursor() as cursor: - cursor.execute( - "CREATE INDEX search_vector_index ON %s USING GIN (%s)" - % (Line._meta.db_table, sql), - params, - ) - - class SearchQueryTests(PostgreSQLSimpleTestCase): def test_str(self): tests = (