Commit aebae99
authored
fix: Add custom nullability for Spark ILIKE function (#19206)
Fixes #19174
This PR adds custom nullability handling for the Spark ILIKE function.
Previously, the function was using the default `is_nullable` which
always returns `true`, which is not correct.
## Changes
- Implemented `return_field_from_args()` to handle custom nullability
logic
- The result is nullable if **any** of the input arguments is nullable
- This matches Spark's behavior where `ILIKE(NULL, pattern)` or
`ILIKE(str, NULL)` returns `NULL`
- Updated `return_type()` to use `internal_err!` pattern to enforce use
of `return_field_from_args`
- Added comprehensive nullability tests covering all combinations:
- Non-nullable when both inputs are non-nullable
- Nullable when first input is nullable
- Nullable when second input is nullable
- Nullable when both inputs are nullable
## Test Plan
All existing tests pass:
running 2 tests test
function::string::ilike::tests::test_ilike_nullability ... ok test
function::string::ilike::tests::test_ilike_invoke ... ok test result:
ok. 2 passed; 0 failed; 0 ignored
The implementation follows the same pattern used by other Spark
functions in the codebase (like `shuffle` and `array`)1 parent 06f27e9 commit aebae99
1 file changed
Lines changed: 84 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
| 20 | + | |
| 21 | + | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
| |||
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
63 | | - | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
64 | 73 | | |
65 | 74 | | |
66 | 75 | | |
| |||
83 | 92 | | |
84 | 93 | | |
85 | 94 | | |
86 | | - | |
| 95 | + | |
87 | 96 | | |
88 | | - | |
| 97 | + | |
89 | 98 | | |
90 | 99 | | |
91 | 100 | | |
| |||
170 | 179 | | |
171 | 180 | | |
172 | 181 | | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
173 | 251 | | |
0 commit comments