From d8c90d4c22cb218f1c170eba086c53d3dff7fbc0 Mon Sep 17 00:00:00 2001 From: Hannes Ljungberg Date: Tue, 25 May 2021 21:17:05 +0200 Subject: Fixed #32786 -- Moved subquery ordering clearing optimization to the _in lookup. Co-Authored-By: Simon Charette --- tests/postgres_tests/test_aggregates.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'tests/postgres_tests') diff --git a/tests/postgres_tests/test_aggregates.py b/tests/postgres_tests/test_aggregates.py index 7f21def1be..d47c24203b 100644 --- a/tests/postgres_tests/test_aggregates.py +++ b/tests/postgres_tests/test_aggregates.py @@ -1,4 +1,6 @@ -from django.db.models import CharField, F, OuterRef, Q, Subquery, Value +from django.db.models import ( + CharField, F, Func, IntegerField, OuterRef, Q, Subquery, Value, +) from django.db.models.fields.json import KeyTextTransform, KeyTransform from django.db.models.functions import Cast, Concat, Substr from django.test.utils import Approximate @@ -12,6 +14,7 @@ try: RegrAvgX, RegrAvgY, RegrCount, RegrIntercept, RegrR2, RegrSlope, RegrSXX, RegrSXY, RegrSYY, StatAggregate, StringAgg, ) + from django.contrib.postgres.fields import ArrayField except ImportError: pass # psycopg2 is not installed @@ -390,6 +393,20 @@ class TestGeneralAggregate(PostgreSQLTestCase): [self.aggs[0]], ) + def test_ordering_isnt_cleared_for_array_subquery(self): + inner_qs = AggregateTestModel.objects.order_by('-integer_field') + qs = AggregateTestModel.objects.annotate( + integers=Func( + Subquery(inner_qs.values('integer_field')), + function='ARRAY', + output_field=ArrayField(base_field=IntegerField()), + ), + ) + self.assertSequenceEqual( + qs.first().integers, + inner_qs.values_list('integer_field', flat=True), + ) + class TestAggregateDistinct(PostgreSQLTestCase): @classmethod -- cgit v1.3