mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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:
		
				
					committed by
					
						
						Sarah Boyce
					
				
			
			
				
	
			
			
			
						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):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user