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

IS_NULL is optimized to incorrect results

    XMLWordPrintableJSON

Details

    Description

      testAllApis() unit tests will run fail because planner make a conversion
      from [ifThenElse(isNull(plus(f0, f1)), 'null', 'not null')]
      to [CASE(OR(IS NULL($0), IS NULL($1)), _UTF-16LE'null', _UTF-16LE'not null')]
      which is not a equivalence conversion. The result of expression 'f0 + 'f1 should be null
      when the result overflows even if its two operands both are not null.

      It's easy to reproduce as following:
      testAllApis(
      'f0 + 'f1,
      "f1 + f1",
      "f1 + f1",
      "null")// the result should be null because overflow

      override def testData: Row =

      { val testData = new Row(2) testData.setField(0, BigDecimal("1e10").bigDecimal) testData.setField(1, BigDecimal("0").bigDecimal) testData }

      override def typeInfo: RowTypeInfo =

      { new RowTypeInfo( /* 0 */ fromLogicalTypeToTypeInfo(DECIMAL(38, 10)), /* 1 */ fromLogicalTypeToTypeInfo(DECIMAL(38, 28)) ) }

       

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              leonard Leonard Xu
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated: