summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/postgres/search.py5
-rw-r--r--docs/releases/4.2.1.txt4
-rw-r--r--tests/postgres_tests/test_search.py6
3 files changed, 11 insertions, 4 deletions
diff --git a/django/contrib/postgres/search.py b/django/contrib/postgres/search.py
index 4e370aa167..936709c2f8 100644
--- a/django/contrib/postgres/search.py
+++ b/django/contrib/postgres/search.py
@@ -144,10 +144,7 @@ class SearchVector(SearchVectorCombinable, Func):
weight_sql, extra_params = compiler.compile(clone.weight)
sql = "setweight({}, {})".format(sql, weight_sql)
- # These parameters must be bound on the client side because we may
- # want to create an index on this expression.
- sql = connection.ops.compose_sql(sql, config_params + params + extra_params)
- return sql, []
+ return sql, config_params + params + extra_params
class CombinedSearchVector(SearchVectorCombinable, CombinedExpression):
diff --git a/docs/releases/4.2.1.txt b/docs/releases/4.2.1.txt
index 2dd051b8fa..c768b98b18 100644
--- a/docs/releases/4.2.1.txt
+++ b/docs/releases/4.2.1.txt
@@ -11,3 +11,7 @@ Bugfixes
* Fixed a regression in Django 4.2 that caused a crash of ``QuerySet.defer()``
when deferring fields by attribute names (:ticket:`34458`).
+
+* Fixed a regression in Django 4.2 that caused a crash of
+ :class:`~django.contrib.postgres.search.SearchVector` function with ``%``
+ characters (:ticket:`34459`).
diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py
index fa7d885221..6f6318899c 100644
--- a/tests/postgres_tests/test_search.py
+++ b/tests/postgres_tests/test_search.py
@@ -160,6 +160,12 @@ class SearchVectorFieldTest(GrailTestData, PostgreSQLTestCase):
)
self.assertNotIn("COALESCE(COALESCE", str(searched.query))
+ def test_values_with_percent(self):
+ searched = Line.objects.annotate(
+ search=SearchVector(Value("This week everything is 10% off"))
+ ).filter(search="10 % off")
+ self.assertEqual(len(searched), 9)
+
class SearchConfigTests(PostgreSQLSimpleTestCase):
def test_from_parameter(self):