You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Yuan Kui (Jira)" <ji...@apache.org> on 2023/03/30 06:32:00 UTC

[jira] [Closed] (FLINK-31653) Using`if` statement for a string subtype of the row type may meet npe in code generated by codegen

     [ https://issues.apache.org/jira/browse/FLINK-31653?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Yuan Kui closed FLINK-31653.
----------------------------
    Resolution: Duplicate

> 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)