Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Duplicate
-
1.16.1, 1.15.4, 1.18.0, 1.17.1
-
None
Description
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:
-- 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
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.
To fix this issue, we can change the location of the logic to generate casted codes in `IfCallGen`, like this:
Attachments
Attachments
Issue Links
- duplicates
-
FLINK-30559 May get wrong result for `if` expression if it's string data type
- Resolved
-
FLINK-30966 Flink SQL IF FUNCTION logic error
- Resolved
-
FLINK-31007 The code generated by the IF function throws NullPointerException
- Closed
- is caused by
-
FLINK-24413 Casting to a CHAR() and VARCHAR() doesn't trim the string to the specified precision
- Closed