Opened 101 minutes ago
Last modified 6 minutes ago
#36938 new Bug
Unioning an ordered queryset fails on Oracle unless a limit is taken
| Reported by: | Jacob Walls | Owned by: | |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 6.0 |
| Severity: | Normal | Keywords: | oracle, union, order_by |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
For the purposes of testing only, adjust this existing test to remove the limits on these unioned querysets:
-
tests/queries/test_qs_combinators.py
diff --git a/tests/queries/test_qs_combinators.py b/tests/queries/test_qs_combinators.py index d1d6bfcbe3..580e9c8734 100644
a b class QuerySetSetOperationTests(TestCase): 680 680 681 681 @skipUnlessDBFeature("supports_slicing_ordering_in_compound") 682 682 def test_ordering_subqueries(self): 683 qs1 = Number.objects.order_by("num") [:2]684 qs2 = Number.objects.order_by("-num") [:2]683 qs1 = Number.objects.order_by("num") 684 qs2 = Number.objects.order_by("-num") 685 685 self.assertNumbersEqual(qs1.union(qs2).order_by("-num")[:4], [9, 8, 1, 0]) 686 686 687 687 @skipIfDBFeature("supports_slicing_ordering_in_compound")
Running that test against Oracle produces:
oracledb.exceptions.DatabaseError: ORA-00907: missing right parenthesis Help: https://docs.oracle.com/error-help/db/ora-00907/
For this SQL:
SELECT * FROM ( (SELECT "QUERIES_NUMBER"."ID" AS "COL1", "QUERIES_NUMBER"."NUM" AS "COL2", "QUERIES_NUMBER"."OTHER_NUM" AS "COL3", "QUERIES_NUMBER"."ANOTHER_NUM" AS "COL4" FROM "QUERIES_NUMBER" ORDER BY "QUERIES_NUMBER"."NUM" ASC) UNION (SELECT "QUERIES_NUMBER"."ID" AS "COL1", "QUERIES_NUMBER"."NUM" AS "COL2", "QUERIES_NUMBER"."OTHER_NUM" AS "COL3", "QUERIES_NUMBER"."ANOTHER_NUM" AS "COL4" FROM "QUERIES_NUMBER" ORDER BY "QUERIES_NUMBER"."NUM" DESC)) ORDER BY "COL2" DESC FETCH FIRST 4 ROWS ONLY;
Discovered after a test was merged that does the same thing, see https://github.com/django/django/pull/20662#issuecomment-3931102843. I'll open a PR to xfail that test (test_count_union_with_select_related_in_values) on Oracle for the time being.
Note:
See TracTickets
for help on using tickets.
In cb24beb: