Opened 3 weeks ago
Closed 3 days ago
#37255 closed Bug (fixed)
Tests rely on unspecified row order of SELECT without ORDER BY
| Reported by: | Yaroslav K | Owned by: | Yaroslav K |
|---|---|---|---|
| Component: | Core (Other) | Version: | dev |
| Severity: | Normal | Keywords: | test |
| Cc: | Yaroslav K | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Many (~70) tests assert a specific row order for querysets whose SQL has no
ORDER BY. SQL standard does not define that order.
On PostgreSQL the rows usually arrive in physical storage order, which
on a freshly loaded table matches insertion order -- so these assertions
pass by coincidence rather than by contract. That breaks when rows are
updated or deleted and the space is reused, or when the planner picks a
different access path such as an index scan. A test like this can start
failing with no change to Django or to the test itself.
Proposed solution:
- add
order_by()where the asserted sequence is meaningful - use
assertCountEqual()otherwise
Found by running the suite under
pg_disorder.
Change History (4)
comment:1 by , 3 weeks ago
| Component: | Testing framework → Core (Other) |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
| Type: | Uncategorized → Bug |
comment:2 by , 9 days ago
| Patch needs improvement: | set |
|---|
comment:3 by , 8 days ago
| Patch needs improvement: | unset |
|---|---|
| Triage Stage: | Accepted → Ready for checkin |
comment:4 by , 3 days ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
In 7576781: