Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-31653

Using`if` statement for a string subtype of the row type may meet npe in code generated by codegen

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    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

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            catyee Yuan Kui
            catyee Yuan Kui
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment