mirror of https://github.com/django/django.git
[2.0.x] Fixed #29108 -- Fixed crash in aggregation of distinct+ordered+sliced querysets.
Regression in4acae21846
. Thanks Stephen Brooks for the report. Backport ofd61fe24601
from master
This commit is contained in:
parent
781a337242
commit
8d03356d35
|
@ -559,7 +559,9 @@ class SQLCompiler:
|
|||
# to exclude extraneous selects.
|
||||
sub_selects = []
|
||||
sub_params = []
|
||||
for select, _, alias in self.select:
|
||||
for index, (select, _, alias) in enumerate(self.select, start=1):
|
||||
if not alias and with_col_aliases:
|
||||
alias = 'col%d' % index
|
||||
if alias:
|
||||
sub_selects.append("%s.%s" % (
|
||||
self.connection.ops.quote_name('subquery'),
|
||||
|
@ -573,7 +575,7 @@ class SQLCompiler:
|
|||
return 'SELECT %s FROM (%s) subquery' % (
|
||||
', '.join(sub_selects),
|
||||
' '.join(result),
|
||||
), sub_params + params
|
||||
), tuple(sub_params + params)
|
||||
|
||||
return ' '.join(result), tuple(params)
|
||||
finally:
|
||||
|
|
|
@ -9,4 +9,5 @@ Django 2.0.3 fixes several bugs in 2.0.2.
|
|||
Bugfixes
|
||||
========
|
||||
|
||||
* ...
|
||||
* Fixed a regression that caused sliced ``QuerySet.distinct().order_by()``
|
||||
followed by ``count()`` to crash (:ticket:`29108`).
|
||||
|
|
|
@ -1891,6 +1891,9 @@ class Queries6Tests(TestCase):
|
|||
qs = Tag.objects.exclude(category=None).exclude(category__name='foo')
|
||||
self.assertEqual(str(qs.query).count(' INNER JOIN '), 1)
|
||||
|
||||
def test_distinct_ordered_sliced_subquery_aggregation(self):
|
||||
self.assertEqual(Tag.objects.distinct().order_by('category__name')[:3].count(), 3)
|
||||
|
||||
|
||||
class RawQueriesTests(TestCase):
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue