summaryrefslogtreecommitdiff
path: root/tests/aggregation
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2023-05-21 23:57:49 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-05-23 06:25:58 +0200
commite5c844d6f2a4ac6ae674d741b5f1fa2a688cedf4 (patch)
treeb7f47b9b83726965bd1d97284555e701cb8a48ba /tests/aggregation
parent2ee01747c32a7275a7a1a5f7862acba7db764921 (diff)
Fixed #34551 -- Fixed QuerySet.aggregate() crash when referencing subqueries.
Regression in 59bea9efd2768102fc9d3aedda469502c218e9b7. Refs #28477. Thanks Denis Roldán and Mariusz for the test.
Diffstat (limited to 'tests/aggregation')
-rw-r--r--tests/aggregation/tests.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py
index 5135458668..366b8434e5 100644
--- a/tests/aggregation/tests.py
+++ b/tests/aggregation/tests.py
@@ -2187,3 +2187,23 @@ class AggregateAnnotationPruningTests(TestCase):
mod_count=Count("*")
)
self.assertEqual(queryset.count(), 1)
+
+ def test_referenced_subquery_requires_wrapping(self):
+ total_books_qs = (
+ Author.book_set.through.objects.values("author")
+ .filter(author=OuterRef("pk"))
+ .annotate(total=Count("book"))
+ )
+ with self.assertNumQueries(1) as ctx:
+ aggregate = (
+ Author.objects.annotate(
+ total_books=Subquery(total_books_qs.values("total"))
+ )
+ .values("pk", "total_books")
+ .aggregate(
+ sum_total_books=Sum("total_books"),
+ )
+ )
+ sql = ctx.captured_queries[0]["sql"].lower()
+ self.assertEqual(sql.count("select"), 3, "Subquery wrapping required")
+ self.assertEqual(aggregate, {"sum_total_books": 3})