mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #34176 -- Fixed grouping by ambiguous aliases.
Regression inb7b28c7c18. Refs #31377. Thanks Shai Berger for the report and reviews. test_aggregation_subquery_annotation_values_collision() has been updated as queries that are explicitly grouped by a subquery should always be grouped by it and not its outer columns even if its alias collides with referenced table columns. This was not possible to accomplish at the time10866a10landed because we didn't have compiler level handling of colliding aliases.
This commit is contained in:
committed by
Mariusz Felisiak
parent
016bead6a2
commit
dd68af62b2
@@ -1500,27 +1500,29 @@ class AggregateTestCase(TestCase):
|
||||
],
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature("supports_subqueries_in_group_by")
|
||||
def test_aggregation_subquery_annotation_values_collision(self):
|
||||
books_rating_qs = Book.objects.filter(
|
||||
publisher=OuterRef("pk"),
|
||||
price=Decimal("29.69"),
|
||||
pk=OuterRef("book"),
|
||||
).values("rating")
|
||||
publisher_qs = (
|
||||
Publisher.objects.filter(
|
||||
book__contact__age__gt=20,
|
||||
name=self.p1.name,
|
||||
)
|
||||
.annotate(
|
||||
rating=Subquery(books_rating_qs),
|
||||
contacts_count=Count("book__contact"),
|
||||
)
|
||||
.values("rating")
|
||||
.annotate(total_count=Count("rating"))
|
||||
.annotate(total_count=Count("*"))
|
||||
.order_by("rating")
|
||||
)
|
||||
self.assertEqual(
|
||||
list(publisher_qs),
|
||||
[
|
||||
{"rating": 4.0, "total_count": 2},
|
||||
{"rating": 3.0, "total_count": 1},
|
||||
{"rating": 4.0, "total_count": 3},
|
||||
{"rating": 4.5, "total_count": 1},
|
||||
{"rating": 5.0, "total_count": 1},
|
||||
],
|
||||
)
|
||||
|
||||
@@ -1642,9 +1644,7 @@ class AggregateTestCase(TestCase):
|
||||
)
|
||||
with self.assertNumQueries(1) as ctx:
|
||||
self.assertSequenceEqual(books_qs, [book])
|
||||
# Outerquery SELECT, annotation SELECT, and WHERE SELECT but GROUP BY
|
||||
# selected alias, if allowed.
|
||||
if connection.features.allows_group_by_refs:
|
||||
if connection.features.allows_group_by_select_index:
|
||||
self.assertEqual(ctx[0]["sql"].count("SELECT"), 3)
|
||||
|
||||
@skipUnlessDBFeature("supports_subqueries_in_group_by")
|
||||
|
||||
Reference in New Issue
Block a user