Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-3845

CASE WHEN expression with nullability CAST is considered as reduced wrongly in ReduceExpressionsRule

    XMLWordPrintableJSON

    Details

      Description

      After ReduceExpressionsRule#reduceExpressionsInternal()[1],

      CAST(CASE WHEN x then true WHEN y then TRUE ELSE false): boolean nullable (exp1) 
      

      will be changed to 

      WHEN x then CAST(true): boolean nullable WHEN y then CAST(true): boolean nullable ELSE CAST(false): boolean nullable.  (exp2)

      Then exp1 is considered as reduced. In the next step, by ReduceExpressionsRule#simplifyPreservingType()[2], exp2 will be changed to 

      CAST(CASE WHEN x then true WHEN y then TRUE ELSE false): boolean nullable (exp3)
      

      , which is exactly the same as exp1.

      Though exp1 is actually not reduced, it is still considered as reduced[3], which leads to CannotPlanException because of  setImportance(project, 0.0)[4].

       

      [1]https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L618

      [2]https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L624

       [3]https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L303

       [4]https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L312

       

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Chunwei Lei Chunwei Lei
                Reporter:
                Chunwei Lei Chunwei Lei
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h 20m
                  1h 20m