summaryrefslogtreecommitdiff
path: root/tests/expressions/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/expressions/tests.py')
-rw-r--r--tests/expressions/tests.py22
1 files changed, 13 insertions, 9 deletions
diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py
index bb448745c8..a51080ef13 100644
--- a/tests/expressions/tests.py
+++ b/tests/expressions/tests.py
@@ -553,16 +553,20 @@ class BasicExpressionsTests(TestCase):
@skipUnlessDBFeature('supports_subqueries_in_group_by')
def test_aggregate_subquery_annotation(self):
- aggregate = Company.objects.annotate(
- ceo_salary=Subquery(
- Employee.objects.filter(
- id=OuterRef('ceo_id'),
- ).values('salary')
- ),
- ).aggregate(
- ceo_salary_gt_20=Count('pk', filter=Q(ceo_salary__gt=20)),
- )
+ with self.assertNumQueries(1) as ctx:
+ aggregate = Company.objects.annotate(
+ ceo_salary=Subquery(
+ Employee.objects.filter(
+ id=OuterRef('ceo_id'),
+ ).values('salary')
+ ),
+ ).aggregate(
+ ceo_salary_gt_20=Count('pk', filter=Q(ceo_salary__gt=20)),
+ )
self.assertEqual(aggregate, {'ceo_salary_gt_20': 1})
+ # Aggregation over a subquery annotation doesn't annotate the subquery
+ # twice in the inner query.
+ self.assertLessEqual(ctx.captured_queries[0]['sql'].count('SELECT'), 4,)
def test_explicit_output_field(self):
class FuncA(Func):