[ 
https://issues.apache.org/jira/browse/CALCITE-5328?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zhen Chen resolved CALCITE-5328.
--------------------------------
    Resolution: Fixed

> The rule of AGGREGATE_EXPAND_DISTINCT_AGGREGATES_TO_JOIN throws error when 
> meeting the rollup's query
> -----------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5328
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5328
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Xurenhe
>            Assignee: Xurenhe
>            Priority: Major
>
> The rule of AGGREGATE_EXPAND_DISTINCT_AGGREGATES_TO_JOIN aims to transform 
> aggregate with distince agg-call to join, such as:
>  
> {code:java}
> // origin sql
> SELECT deptno,
>        job,
>        count(DISTINCT ename),
>        sum(DISTINCT sal)
> FROM sales.emp
> GROUP BY deptno,
>          job;
> // transformed sql
> SELECT t1.deptno,
>        t2.job,
>        c1,
>        c2
>   (SELECT deptno, job, count(ename) AS c1
>    FROM
>      (SELECT deptno, job, ename
>       GROUP BY deptno, job, ename)
>    GROUP BY deptno, job) t1
> INNER JOIN
>   (SELECT deptno,
>           job,
>           sum(sal) AS c2
>    FROM
>      (SELECT deptno,
>              job,
>              sal
>       GROUP BY deptno,
>                job,
>                sal)
>    GROUP BY deptno,
>             job) t2 
> ON t1.deptno IS NOT DISTINCT FROM t2.deptno AND t1.job IS NOT DISTINCTFROM 
> t2.job;{code}
>  
> *{color:#FF0000}But, {color:#172b4d}this rule throws ex, when meeting 
> aggregate with rollup.{color}{color}*
>  * *Test Case*
> {code:java}
> // org.apache.calcite.test.RelOptRulesTest#test
> @Test void test() {
>     final String sql = "select deptno, job, count(distinct ename), 
> sum(distinct sal)\n"
>         + "from sales.emp group by rollup(deptno,job)";
>     sql(sql)
>         .withRule(CoreRules.AGGREGATE_EXPAND_DISTINCT_AGGREGATES_TO_JOIN)
>         .check();
> } {code}
>  * *Error Message*
> {code:java}
> type mismatch:
> ref:
> INTEGER
> input:
> INTEGER NOT NULL
> java.lang.AssertionError: type mismatch:
> ref:
> INTEGER
> input:
> INTEGER NOT NULL
>     at org.apache.calcite.util.Litmus$1.fail(Litmus.java:32)
>     at org.apache.calcite.plan.RelOptUtil.eq(RelOptUtil.java:2183)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:129)
>     at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:61)
>     at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:113)
>     at org.apache.calcite.rel.core.Project.isValid(Project.java:245)
>     at org.apache.calcite.rel.core.Project.<init>(Project.java:106)
>     at 
> org.apache.calcite.rel.logical.LogicalProject.<init>(LogicalProject.java:75)
>     at 
> org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:166)
>     at 
> org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:143)
>     at 
> org.apache.calcite.rel.core.RelFactories$ProjectFactoryImpl.createProject(RelFactories.java:199)
>     at org.apache.calcite.tools.RelBuilder.project_(RelBuilder.java:2066)
>     at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1837)
>     at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1820)
>     at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1792)
>     at 
> org.apache.calcite.rel.rules.AggregateExpandDistinctAggregatesRule.onMatch(AggregateExpandDistinctAggregatesRule.java:265)
>     at 
> org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:337)
>  {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to