mirror of https://github.com/django/django.git
[5.1.x] Fixed #35732 -- Wrapped ConcatPair expression in parentheses to ensure operator precedence.
When ConcatPair was updated to use || this lost the implicit wrapping from CONCAT(...). This broke the WHERE clauses when used in combination with PostgreSQL trigram similarity. Regression in6364b6ee10
. Backport ofc3ca6075cc
from main. Co-authored-by: Emiliano Cuenca <106986074+emicuencac@users.noreply.github.com>
This commit is contained in:
parent
bf45f06769
commit
590f5e09f0
|
@ -78,7 +78,7 @@ class ConcatPair(Func):
|
|||
return super(ConcatPair, coalesced).as_sql(
|
||||
compiler,
|
||||
connection,
|
||||
template="%(expressions)s",
|
||||
template="(%(expressions)s)",
|
||||
arg_joiner=" || ",
|
||||
**extra_context,
|
||||
)
|
||||
|
|
|
@ -9,4 +9,6 @@ Django 5.1.2 fixes several bugs in 5.1.1.
|
|||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a regression in Django 5.1 that caused a crash when using the
|
||||
PostgreSQL lookup :lookup:`trigram_similar` on output fields from ``Concat``
|
||||
(:ticket:`35732`).
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
from django.db.models import F, Value
|
||||
from django.db.models.functions import Concat
|
||||
|
||||
from . import PostgreSQLTestCase
|
||||
from .models import CharFieldModel, TextFieldModel
|
||||
|
||||
|
@ -149,6 +152,21 @@ class TrigramTest(PostgreSQLTestCase):
|
|||
],
|
||||
)
|
||||
|
||||
def test_trigram_concat_precedence(self):
|
||||
search_term = "im matthew"
|
||||
self.assertSequenceEqual(
|
||||
self.Model.objects.annotate(
|
||||
concat_result=Concat(
|
||||
Value("I'm "),
|
||||
F("field"),
|
||||
output_field=self.Model._meta.get_field("field"),
|
||||
),
|
||||
)
|
||||
.filter(concat_result__trigram_similar=search_term)
|
||||
.values("field"),
|
||||
[{"field": "Matthew"}],
|
||||
)
|
||||
|
||||
|
||||
class TrigramTextFieldTest(TrigramTest):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue