Commit cab69a1
Fix correlated subquery empty defaults for regr_count and approx_distinct (#22319)
## Which issue does this PR close?
- Closes #22317.
## Rationale for this change
Correlated scalar subqueries with ungrouped aggregates are decorrelated
into joins. For unmatched outer rows, the rewritten join naturally
produces NULLs on the right side, so DataFusion has compensation logic
for aggregates that should return a non-NULL value on empty input.
That compensation previously special-cased `count` by name. As a result,
other aggregates with non-NULL empty-input results, such as `regr_count`
and `approx_distinct`, incorrectly returned NULL after decorrelation.
## What changes are included in this PR?
This PR updates decorrelation to use each aggregate UDF's
`default_value()` instead of hard-coding `count`.
It also adds empty-input defaults for:
- `regr_count`: `UInt64(0)`
- `approx_distinct`: `UInt64(0)`
Regression coverage is added for correlated scalar subqueries using
these aggregates in projection expressions and filters.
## Are these changes tested?
Yes.
```bash
cargo fmt --all
cargo test -p datafusion-sqllogictest --test sqllogictests -- subquery.slt
```
## Are there any user-facing changes?
Yes. Queries using `regr_count` or `approx_distinct` in correlated
scalar subqueries now return `0` for unmatched outer rows instead of
`NULL`, matching the aggregate behavior on empty input.
---------
Co-authored-by: Nathan Bezualem <nbez@amazon.com>
Co-authored-by: nathanb9 <nathanb9@amazon.com>1 parent c48e993 commit cab69a1
6 files changed
Lines changed: 92 additions & 16 deletions
File tree
- datafusion
- core/tests/dataframe
- functions-aggregate/src
- optimizer/src
- sqllogictest/test_files
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1204 | 1204 | | |
1205 | 1205 | | |
1206 | 1206 | | |
1207 | | - | |
| 1207 | + | |
1208 | 1208 | | |
1209 | 1209 | | |
1210 | 1210 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
381 | 381 | | |
382 | 382 | | |
383 | 383 | | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
384 | 392 | | |
385 | 393 | | |
386 | 394 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
457 | 457 | | |
458 | 458 | | |
459 | 459 | | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
460 | 472 | | |
461 | 473 | | |
462 | 474 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
39 | | - | |
| 38 | + | |
| 39 | + | |
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| |||
512 | 512 | | |
513 | 513 | | |
514 | 514 | | |
515 | | - | |
516 | | - | |
517 | | - | |
518 | | - | |
519 | | - | |
520 | | - | |
521 | | - | |
522 | | - | |
523 | | - | |
524 | | - | |
525 | | - | |
526 | | - | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
527 | 521 | | |
528 | 522 | | |
529 | 523 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
819 | 819 | | |
820 | 820 | | |
821 | 821 | | |
822 | | - | |
| 822 | + | |
823 | 823 | | |
824 | 824 | | |
825 | 825 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
888 | 888 | | |
889 | 889 | | |
890 | 890 | | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
891 | 953 | | |
892 | 954 | | |
893 | 955 | | |
| |||
0 commit comments