Yuan Kui created FLINK-31653:
--------------------------------
Summary: codegen npe when using `if` statement for a string
subtype of the row type
Key: FLINK-31653
URL: https://issues.apache.org/jira/browse/FLINK-31653
Project: Flink
Issue Type: Bug
Components: Table SQL / Planner
Affects Versions: 1.15.4, 1.16.1, 1.18.0, 1.17.1
Reporter: Yuan Kui
Fix For: 1.18.0
Attachments: image-2023-03-29-14-52-17-277.png,
image-2023-03-29-15-33-37-983.png
When I use the `if` statement for the string subtype of the row type, the code
generated by `IfCallGen` may meets npe. The case is:
{code:java}
-- if the value of 'nested' colmun is row(null, 10), the job will meets npe
CREATE TABLE NestedTable (
nested row<name string, `value` int>
) WITH (
...
);
select
if (nested.name is null, 'JKL', nested.name) AS nestedName
from NestedTable {code}
Three conditions are required for this bug :
1、use `if` statement
2、string subtype of row type
3、the string subtype element is null
After excluding the effect of java code spilitter, the original code generated
by codegen like the picture(you can find the complete code generated by codegen
in attached files),the assignment logic for `isNull$7` is between the line 142
and the line 154, so the value of `isNull$7` in line 96 is always false, the
line 97 will meets npe when `result$7` is null.
!image-2023-03-29-14-52-17-277.png!
The way to fix this issue is changing the location of casted codes, like this:
!image-2023-03-29-15-33-37-983.png!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)