Opened 3 years ago

Last modified 3 years ago

#24296 new Cleanup/optimization

clear select fields for `.exists()` of distinct, non-sliced querysets

Reported by: Martin Chase Owned by: nobody
Component: Database layer (models, ORM) Version: 1.7
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The fix (93cc6dcdac6fc3e506640fa38dd1798c3cd61cff) for bug #18414 introduced an inefficiency in .exists() on distinct querysets in that now all distinct querysets are selecting all their fields. I propose the fields should be left on the queryset only if (q.distinct and (q.high_mark is not None or q.low_mark is not None)).

As I started writing the test for this, I realized I would have to inspect the query itself, which seems... like a bad idea for a test. Would this be reasonable to submit the (one-line-change) patch without a test, or does someone have a suggestion for a way to make the test that's less brittle?

Change History (1)

comment:1 Changed 3 years ago by Tim Graham

Triage Stage: UnreviewedAccepted

A test that inspects the query is likely fine. See if you can find an existing test that does something similar.

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