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)