Commit d2b93f5
fix: SortPreservingMerge sanity check rejects valid ORDER BY with CASE expression (#18342)
## Which issue does this PR close?
- Closes #18327
## Rationale for this change
ORDER BY with a CASE statement didn't always work, raising a sanity
check error in SortPreservingMergeExec. The plan showed that the
partitions all had the same ordering, but for whatever reason they were
not detected as being equal. Using a single partition succeeded always.
## What changes are included in this PR?
The changes are non-obvious and I spent a lot of time bisecting/debug
printing and landed on a failure in bounds checking with boolean
interval arithmetic. Returning UNCERTAIN if either leg of the interval
is NULL resolves the upstream issue where CASE statements end up being
deemed Unordered.
My rust-fu is hobbyist at best, so while this appears to resolve my
issue I cannot for-certain exclaim that I've solved it all (Claude 4.5
agrees with my fix, but that's not an indication its any good). I'm also
reasonably certain my unit tests are more ham fisted than necessary.
## Are these changes tested?
1. Yes, unit tests have been added.
## Are there any user-facing changes?
This does not change any behavior beyond resolving a bug with a valid
SQL statement.
---------
Co-authored-by: Andrew Lamb <[email protected]>1 parent dcd2f4f commit d2b93f5
File tree
2 files changed
+101
-2
lines changed- datafusion
- expr-common/src
- sqllogictest/test_files
2 files changed
+101
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
583 | 583 | | |
584 | 584 | | |
585 | 585 | | |
586 | | - | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
587 | 589 | | |
588 | 590 | | |
589 | 591 | | |
| |||
606 | 608 | | |
607 | 609 | | |
608 | 610 | | |
609 | | - | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
610 | 614 | | |
611 | 615 | | |
612 | 616 | | |
| |||
2517 | 2521 | | |
2518 | 2522 | | |
2519 | 2523 | | |
| 2524 | + | |
| 2525 | + | |
| 2526 | + | |
| 2527 | + | |
| 2528 | + | |
| 2529 | + | |
| 2530 | + | |
| 2531 | + | |
| 2532 | + | |
| 2533 | + | |
| 2534 | + | |
| 2535 | + | |
| 2536 | + | |
| 2537 | + | |
| 2538 | + | |
| 2539 | + | |
| 2540 | + | |
| 2541 | + | |
| 2542 | + | |
| 2543 | + | |
| 2544 | + | |
| 2545 | + | |
| 2546 | + | |
| 2547 | + | |
| 2548 | + | |
| 2549 | + | |
| 2550 | + | |
| 2551 | + | |
| 2552 | + | |
| 2553 | + | |
| 2554 | + | |
| 2555 | + | |
| 2556 | + | |
| 2557 | + | |
| 2558 | + | |
| 2559 | + | |
| 2560 | + | |
| 2561 | + | |
| 2562 | + | |
| 2563 | + | |
| 2564 | + | |
| 2565 | + | |
| 2566 | + | |
| 2567 | + | |
| 2568 | + | |
| 2569 | + | |
| 2570 | + | |
| 2571 | + | |
| 2572 | + | |
| 2573 | + | |
| 2574 | + | |
| 2575 | + | |
| 2576 | + | |
| 2577 | + | |
| 2578 | + | |
| 2579 | + | |
| 2580 | + | |
| 2581 | + | |
2520 | 2582 | | |
2521 | 2583 | | |
2522 | 2584 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
953 | 953 | | |
954 | 954 | | |
955 | 955 | | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
0 commit comments