findepi opened a new pull request, #14349:
URL: https://github.com/apache/datafusion/pull/14349
There is an optimization for searched CASE where values are of boolean type.
It was converting the expression like
CASE
WHEN X THEN A
WHEN Y THEN B
..
[ ELSE D ]
END
into
(X AND A)
OR (Y AND NOT X AND B)
[ OR (NOT (X OR Y) AND D) ]
This had the following problems
- does not work for nullable conditions. If X is nullable, we cannot use NOT
(X) to compliment it. We need to use `X IS DISTINCT FROM true`
- it does not work correctly when some conditions are nullable and other
values are false. E.g. X=NULL, A=true, Y=NULL, B=true, D=false, the CASE should
return false, but the boolean expression will simplify to `(NULL AND ..) OR
(NULL AND ..) OR (false)` which is NULL, not false
- thus we use `X` for truthness check of `X`, we need to test `X IS NOT
DISTINCT FROM true`
- it did not work correctly when default D is missing, but conditions do not
evaluate to NULL. CASE's result should be NULL but was false.
This commit fixes that optimization.
- Fixes https://github.com/apache/datafusion/issues/14343
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]