[ https://issues.apache.org/jira/browse/FLINK-31653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17706285#comment-17706285 ]
Martijn Visser commented on FLINK-31653: ---------------------------------------- [~catyee] Is this a duplicate of FLINK-31007 ? > Using`if` statement for a string subtype of the row type may meet npe in code > generated by codegen > -------------------------------------------------------------------------------------------------- > > Key: FLINK-31653 > URL: https://issues.apache.org/jira/browse/FLINK-31653 > Project: Flink > Issue Type: Bug > Components: Table SQL / Planner > Affects Versions: 1.16.1, 1.15.4, 1.18.0, 1.17.1 > Reporter: Yuan Kui > Assignee: Yuan Kui > Priority: Critical > Fix For: 1.16.2, 1.18.0, 1.17.1, 1.15.5 > > Attachments: StreamExecCalc$17, image-2023-03-29-15-33-37-983.png, > image-2023-03-29-16-06-19-351.png > > > When I use the `if` statement for the string subtype of the row type, the > code generated by `IfCallGen` may meet npe. The case is: > {code:java} > -- if the value of 'nested' colmun is row(null, 10), the job will meet 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 to reproduce the bug: > 1、use `if` statement > 2、string subtype of row type > 3、the value of string subtype element is null > > After excluding the effect of java code spilitter, the picture shows the > original code generated by codegen(you can find the complete code generated > by codegen in attached file: [^StreamExecCalc$17]),the assignment logic for > `isNull$7` is between the line 140 and the line 152, so the value of > `isNull$7` in line 94 is always false(the default value), and the line 96 > will meet npe when `result$7` is null. > !image-2023-03-29-16-06-19-351.png|width=703,height=533! > To fix this issue, we can change the location of the logic to generate casted > codes in `IfCallGen`, like this: > !image-2023-03-29-15-33-37-983.png|width=829,height=361! -- This message was sent by Atlassian Jira (v8.20.10#820010)