[
https://issues.apache.org/jira/browse/CALCITE-2026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16234441#comment-16234441
]
Volodymyr Vysotskyi commented on CALCITE-2026:
----------------------------------------------
[~julianhyde], [~jcamachorodriguez] thanks for looking into this.
Unfortunately, I could not use a predicate that says the value is never null
since the value is null and further handle of such value causes errors.
The expression contains cast operator and its operand is RexLiteral, so I think
RexReplacer does not help for this case \[1\].
I agree that relaxing the condition in the optimizer may solve this problem.
As an alternative, let's consider adding makeAbstractCast into \[2\] instead of
makeCast. I checked, and it also solves the problem. Is this change acceptable
for Calcite?
\[1\]
https://github.com/apache/calcite/blob/a9ac3e486863b36009a6e5e0f066134ad34b3334/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L796
\[2\]
https://github.com/apache/calcite/blob/a9ac3e486863b36009a6e5e0f066134ad34b3334/core/src/main/java/org/apache/calcite/rex/RexUtil.java#L2614
> 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)