mirror of https://github.com/django/django.git
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 in 6364b6ee10
.
Co-authored-by: Emiliano Cuenca <106986074+emicuencac@users.noreply.github.com>
This commit is contained in:
parent
38c2065154
commit
c3ca6075cc
|
@ -78,7 +78,7 @@ class ConcatPair(Func):
|
||||||
return super(ConcatPair, coalesced).as_sql(
|
return super(ConcatPair, coalesced).as_sql(
|
||||||
compiler,
|
compiler,
|
||||||
connection,
|
connection,
|
||||||
template="%(expressions)s",
|
template="(%(expressions)s)",
|
||||||
arg_joiner=" || ",
|
arg_joiner=" || ",
|
||||||
**extra_context,
|
**extra_context,
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,4 +9,6 @@ Django 5.1.2 fixes several bugs in 5.1.1.
|
||||||
Bugfixes
|
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 . import PostgreSQLTestCase
|
||||||
from .models import CharFieldModel, TextFieldModel
|
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):
|
class TrigramTextFieldTest(TrigramTest):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue