[Django] #30683: QuerySet.count() crashes when window functions and conditional expressions are both used

4 views
Skip to first unread message

Django

unread,
Aug 5, 2019, 9:01:27 AM8/5/19
to django-...@googlegroups.com
#30683: QuerySet.count() crashes when window functions and conditional expressions
are both used
-------------------------------------+-------------------------------------
Reporter: adamsol | Owner: nobody
Type: Bug | Status: new
Component: Database | Version: 2.2
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
Any `count()` query with window functions inside conditional expressions,
like:

{{{Model.objects.annotate(rank=Case(When(condition=~Q(pk=None),
then=Window(Rank(), order_by=F('pk'))))).count()}}}

throws an error:

{{{django.db.utils.ProgrammingError: window functions are not allowed in
GROUP BY}}}

The query works after adding `.values('pk')` to it or when conditional
expressions are not used.

There is a similar inconsistency when we call e.g. `.filter(rank__gt=0)`
instead of `.count()`. It doesn't work anyway (#28333), but there are two
different errors depending on whether conditionals are used:
`django.db.utils.ProgrammingError: window functions are not allowed in
WHERE` or `django.db.utils.NotSupportedError: Window is disallowed in the
filter clause.`.

--
Ticket URL: <https://code.djangoproject.com/ticket/30683>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Aug 5, 2019, 9:08:15 AM8/5/19
to django-...@googlegroups.com
#30683: QuerySet.count() crashes when window functions and conditional expressions
are both used.

-------------------------------------+-------------------------------------
Reporter: adamsol | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* version: 2.2 => master


Comment:

`QuerySet.filter()` part of this ticket was fixed in #30668.

--
Ticket URL: <https://code.djangoproject.com/ticket/30683#comment:1>

Django

unread,
Aug 5, 2019, 9:44:17 AM8/5/19
to django-...@googlegroups.com
#30683: QuerySet.count() crashes when window functions and conditional expressions
are both used.

-------------------------------------+-------------------------------------
Reporter: adamsol | Owner: nobody
Type: Bug | Status: closed

Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution: duplicate
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* status: new => closed
* resolution: => duplicate


Comment:

`GROUP BY` issue was fixed in 3f32154f40a855afa063095e3d091ce6be21f2c5.

--
Ticket URL: <https://code.djangoproject.com/ticket/30683#comment:2>

Reply all
Reply to author
Forward
0 new messages