[ 
https://issues.apache.org/jira/browse/CALCITE-2026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16234339#comment-16234339
 ] 

Julian Hyde commented on CALCITE-2026:
--------------------------------------

You're right; CALCITE-1502 is similar but different. I suspect that 
ProjectReduceExpressionsRule needs to cast the value to nullable (even though 
it can never be null) just in order to preserve types. It looks as if 
RexReplacer.addCasts exists for exactly this purpose, but it is set to all 
false values on 2 out of 3 code paths.

For extra credit, generate a predicate that says the value is never null.

> AssertionError when ProjectReduceExpressionsRule simplifies project 
> expressions
> -------------------------------------------------------------------------------
>
>                 Key: CALCITE-2026
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2026
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>            Reporter: Volodymyr Vysotskyi
>            Assignee: Julian Hyde
>            Priority: Major
>
> When applying ProjectReduceExpressionsRule on project which expression has a 
> non-nullable type, but after simplifying expression is null, the query fails 
> with the assertion error:
> {noformat}
> java.lang.AssertionError: Type mismatch:
> rel rowtype:
> RecordType(INTEGER EXPR$0) NOT NULL
> equivRel rowtype:
> RecordType(INTEGER NOT NULL EXPR$0) NOT NULL
>       at org.apache.calcite.util.Litmus$1.fail(Litmus.java:31) 
> ~[calcite-core-1.13.0.jar:1.13.0]
>       at org.apache.calcite.plan.RelOptUtil.equal(RelOptUtil.java:1868) 
> ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:855)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:883)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:1767)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.transformTo(VolcanoRuleCall.java:135)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.RelOptRuleCall.transformTo(RelOptRuleCall.java:234) 
> ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule$ProjectReduceExpressionsRule.onMatch(ReduceExpressionsRule.java:268)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:212)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:650)
>  ~[calcite-core-1.13.0.jar:1.13.0]
>       at 
> org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:368) 
> ~[calcite-core-1.13.0.jar:1.13.0]
> {noformat}
> The similar bug was described in CALCITE-1502, since there was a problem with 
> non-nullable and nullable types in different case branches, but this bug 
> appears when project expression is transformed into the expression with 
> nullable type.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to