You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2017/11/01 16:35:00 UTC

[jira] [Commented] (CALCITE-2026) AssertionError when ProjectReduceExpressionsRule simplifies project expressions

    [ 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)