mirror of
https://github.com/django/django.git
synced 2025-06-05 11:39:13 +00:00
Fixed #35042 -- Fixed a count() crash on combined queries.
Regression in 59bea9efd2768102fc9d3aedda469502c218e9b7. Thanks Marcin for the report.
This commit is contained in:
parent
eea4f92f9a
commit
77278929c8
@ -520,11 +520,11 @@ class Query(BaseExpression):
|
|||||||
self.model._meta.pk.get_col(inner_query.get_initial_alias()),
|
self.model._meta.pk.get_col(inner_query.get_initial_alias()),
|
||||||
)
|
)
|
||||||
inner_query.default_cols = False
|
inner_query.default_cols = False
|
||||||
if not qualify:
|
if not qualify and not self.combinator:
|
||||||
# Mask existing annotations that are not referenced by
|
# Mask existing annotations that are not referenced by
|
||||||
# aggregates to be pushed to the outer query unless
|
# aggregates to be pushed to the outer query unless
|
||||||
# filtering against window functions is involved as it
|
# filtering against window functions or if the query is
|
||||||
# requires complex realising.
|
# combined as both would require complex realiasing logic.
|
||||||
annotation_mask = set()
|
annotation_mask = set()
|
||||||
if isinstance(self.group_by, tuple):
|
if isinstance(self.group_by, tuple):
|
||||||
for expr in self.group_by:
|
for expr in self.group_by:
|
||||||
|
@ -2344,3 +2344,18 @@ class AggregateAnnotationPruningTests(TestCase):
|
|||||||
max_book_author=Max("book__authors"),
|
max_book_author=Max("book__authors"),
|
||||||
).aggregate(count=Count("id", filter=Q(id__in=[F("max_book_author"), 0])))
|
).aggregate(count=Count("id", filter=Q(id__in=[F("max_book_author"), 0])))
|
||||||
self.assertEqual(aggregates, {"count": 1})
|
self.assertEqual(aggregates, {"count": 1})
|
||||||
|
|
||||||
|
def test_aggregate_combined_queries(self):
|
||||||
|
# Combined queries could have members in their values select mask while
|
||||||
|
# others have them in their annotation mask which makes annotation
|
||||||
|
# pruning complex to implement hence why it's not implemented.
|
||||||
|
qs = Author.objects.values(
|
||||||
|
"age",
|
||||||
|
other=Value(0),
|
||||||
|
).union(
|
||||||
|
Book.objects.values(
|
||||||
|
age=Value(0),
|
||||||
|
other=Value(0),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.assertEqual(qs.count(), 3)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user