Opened 10 years ago

Last modified 10 years ago

#23836 closed Bug

aggregate with a sliced queryset doesn't work with relations — at Initial Version

Reported by: Reinout van Rees Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Sander Smits, yitzc Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

#12886 fixed aggregation for sliced querysets by using subqueries.

This also fixed the GIS "Extent" aggregation for sliced querysets, which was reported in #15101.

While investigating #15101, a test we made failed initially. We noticed however that we were doing an extent aggregation over a relation. So we also made a test for the simple slice+extent() case, which worked.

Aha! Then we made a test similar to the one made to test #12886, but which followed a relation. At least with postgres this resulted in an error: column subquery.num_awards does not exist.

`
Traceback (most recent call last):

File "/d/dev/repos/django/django/tests/aggregation/tests.py", line 664, in test_aggregation_with_limit_and_relation

vals = qs.aggregate(average_num_awards=Avg('publishernum_awards'))average_num_awards

File "/d/dev/repos/django/django/django/db/models/query.py", line 342, in aggregate

return query.get_aggregation(using=self.db, force_subq=force_subq)

File "/d/dev/repos/django/django/django/db/models/sql/query.py", line 366, in get_aggregation

result = compiler.execute_sql(SINGLE)

File "/d/dev/repos/django/django/django/db/models/sql/compiler.py", line 817, in execute_sql

cursor.execute(sql, params)

File "/d/dev/repos/django/django/django/db/backends/utils.py", line 65, in execute

return self.cursor.execute(sql, params)

File "/d/dev/repos/django/django/django/db/utils.py", line 95, in exit

six.reraise(dj_exc_type, dj_exc_value, traceback)

File "/d/dev/repos/django/django/django/db/backends/utils.py", line 65, in execute

return self.cursor.execute(sql, params)

ProgrammingError: column subquery.num_awards does not exist
LINE 1: SELECT AVG("subquery"."num_awards") FROM (SELECT "aggregatio...
`

I don't know how bad this is. Whether it is even supposed to work.

I also don't know how hard to fix it is :-) Might be just a matter of doing AVG("subquery"."publisher"."num_awards"), so adding the .publisher relation name in there.

Pull request with the failing test is upcoming.

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top