Fixed #32546 -- Avoided Meta.ordering columns in GROUP BY clauses.
Follow up to 0ddb4ebf7b
.
This commit is contained in:
parent
bc04941bf8
commit
330bc402a8
|
@ -125,11 +125,12 @@ class SQLCompiler:
|
||||||
cols = expr.get_group_by_cols()
|
cols = expr.get_group_by_cols()
|
||||||
for col in cols:
|
for col in cols:
|
||||||
expressions.append(col)
|
expressions.append(col)
|
||||||
for expr, (sql, params, is_ref) in order_by:
|
if not self._meta_ordering:
|
||||||
# Skip References to the select clause, as all expressions in the
|
for expr, (sql, params, is_ref) in order_by:
|
||||||
# select clause are already part of the group by.
|
# Skip references to the SELECT clause, as all expressions in
|
||||||
if not is_ref:
|
# the SELECT clause are already part of the GROUP BY.
|
||||||
expressions.extend(expr.get_group_by_cols())
|
if not is_ref:
|
||||||
|
expressions.extend(expr.get_group_by_cols())
|
||||||
having_group_by = self.having.get_group_by_cols() if self.having else ()
|
having_group_by = self.having.get_group_by_cols() if self.having else ()
|
||||||
for expr in having_group_by:
|
for expr in having_group_by:
|
||||||
expressions.append(expr)
|
expressions.append(expr)
|
||||||
|
|
|
@ -2,7 +2,7 @@ from datetime import datetime
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
CharField, DateTimeField, F, Max, OuterRef, Subquery, Value,
|
CharField, Count, DateTimeField, F, Max, OuterRef, Subquery, Value,
|
||||||
)
|
)
|
||||||
from django.db.models.functions import Upper
|
from django.db.models.functions import Upper
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
@ -484,3 +484,12 @@ class OrderingTests(TestCase):
|
||||||
ca4 = ChildArticle.objects.create(headline='h1', pub_date=datetime(2005, 7, 28))
|
ca4 = ChildArticle.objects.create(headline='h1', pub_date=datetime(2005, 7, 28))
|
||||||
articles = ChildArticle.objects.order_by('article_ptr')
|
articles = ChildArticle.objects.order_by('article_ptr')
|
||||||
self.assertSequenceEqual(articles, [ca4, ca2, ca1, ca3])
|
self.assertSequenceEqual(articles, [ca4, ca2, ca1, ca3])
|
||||||
|
|
||||||
|
def test_default_ordering_does_not_affect_group_by(self):
|
||||||
|
Article.objects.exclude(headline='Article 4').update(author=self.author_1)
|
||||||
|
Article.objects.filter(headline='Article 4').update(author=self.author_2)
|
||||||
|
articles = Article.objects.values('author').annotate(count=Count('author'))
|
||||||
|
self.assertCountEqual(articles, [
|
||||||
|
{'author': self.author_1.pk, 'count': 3},
|
||||||
|
{'author': self.author_2.pk, 'count': 1},
|
||||||
|
])
|
||||||
|
|
Loading…
Reference in New Issue