Opened 11 years ago

Closed 11 years ago

Last modified 10 years ago

#10089 closed (fixed)

Aggregation breaks QuerySet.count() with empty results

Reported by: Kyle Fox Owned by: David Larlet
Component: Database layer (models, ORM) Version: master
Severity: Keywords: queryset, execute_sql, aggregation, count, filter, in
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


When calling count() after performing an __in=[] filter, a TypeError is thrown (see example). This is because BaseQuery.get_aggregation is attempting to zip query.execute_sql(SINGLE) (line 301), which can evaluate to None in Line 1933:

# Works, even if the filter returns no results.

# Breaks: Filtering with an empty list and then calling `count()` throws an error.

I'm not sure how to fix this problem. I'm assuming that a return value of None is the intended behavior of execute_sql in this case, and that get_aggregation should be make more robust to handle a result of None.

Attachments (1)

patch_django_10089.20090121diff (1.4 KB) - added by David Larlet 11 years ago.
First naive approach

Download all attachments as: .zip

Change History (4)

Changed 11 years ago by David Larlet

First naive approach

comment:1 Changed 11 years ago by David Larlet

Has patch: set
Owner: changed from nobody to David Larlet
Status: newassigned

comment:2 Changed 11 years ago by Russell Keith-Magee

Resolution: fixed
Status: assignedclosed

(In [9786]) Fixed #10089 -- Corrected handling of aggregates when the query set contains no items (and the cursor returns None). Thanks to Kyle Fox for the report, and david for the initial patch.

comment:3 Changed 10 years ago by (none)

milestone: post-1.0

Milestone post-1.0 deleted

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