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

Julian Hyde commented on CALCITE-1295:
--------------------------------------

It is not the responsibility of rules such as ReduceExpressionRule to handle 
AS. AS calls are simply a shorthand for defining expressions with aliases in 
RelBuilder.project, but RelBuilder should strip them away before constructing 
the RelNode.

Arguably the RexNodes passed to other RelBuilder methods, e.g. filter, should 
not be allowed to contain AS.

> ReduceExpressionRule should not reduce AS operator
> --------------------------------------------------
>
>                 Key: CALCITE-1295
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1295
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.8.0
>            Reporter: Jark Wu
>            Assignee: Julian Hyde
>            Priority: Minor
>             Fix For: 1.8.0, 1.9.0
>
>
> In extremely rare cases, if we build relation tree ourselves through 
> RelBuilder. 
> {code:java}
> relBuilder.push(
>         LogicalProject.create(relBuilder.peek(),
>           Lists.newArrayList(relBuilder.alias(relBuilder.literal(true), 
> "_c0")),
>           Lists.newArrayList("_c0")))
> {code}
> Then we may have AS(true, $1) in the expressions, and  AS(true, $1)  can 
> satisfy ReduceExpressionRule, but AS call do not exist in 
> RexImpTable.INSTANCE, so it throws this : 
> {code:java}
> java.lang.RuntimeException: cannot translate call AS($t0, $t1)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateCall(RexToLixTranslator.java:533)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate0(RexToLixTranslator.java:507)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:219)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate0(RexToLixTranslator.java:472)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:219)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:214)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateList(RexToLixTranslator.java:700)
>       at 
> org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateProjects(RexToLixTranslator.java:189)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.compile(RexExecutorImpl.java:80)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.compile(RexExecutorImpl.java:59)
>       at 
> org.apache.calcite.rex.RexExecutorImpl.reduce(RexExecutorImpl.java:118)
>       at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule.reduceExpressionsInternal(ReduceExpressionsRule.java:544)
>       at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule.reduceExpressions(ReduceExpressionsRule.java:455)
>       at 
> org.apache.calcite.rel.rules.ReduceExpressionsRule.reduceExpressions(ReduceExpressionsRule.java:438)
> {{code}}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to