[
https://issues.apache.org/jira/browse/CALCITE-3087?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16855352#comment-16855352
]
Feng Zhu commented on CALCITE-3087:
-----------------------------------
I add a test case for ROLLUP.
{code:java}
Query
=========================================================================================
Aggregate(groupSet: {0, 1}, groupSets: [{0, 1}, {0}, {}], calls: [COUNT()])
Project(projects: [$1, $0])
Project(projects: [$0, $1, $3])
Scan(table: [hr, emps])
Target
==========================================================================================
targetDescent=Aggregate(groupSet: {0, 1}, groupSets: [{0, 1}], calls: [COUNT(),
SUM($2)])
Project(projects: [$0, $1, $3])
Scan(table: [hr, emps])
Result
==========================================================================================
Project(projects: [$1, $0, $2])
Aggregate(groupSet: {0, 1}, groupSets: [{0, 1}, {1}, {}], calls: [$SUM0($2)])
Aggregate(groupSet: {0, 1}, groupSets: [{0, 1}], calls: [COUNT(), SUM($2)])
Project(projects: [$0, $1, $3])
Scan(table: [hr, emps])
{code}
AggregateOnProjectToAggregateUnifyRule guarantees correctness.
{code:java}
Aggregate2
==========================================================================================
Aggregate(groupSet: {0, 1}, groupSets: [{0, 1}, {1}, {}], calls: [COUNT()])
Project(projects: [$0, $1, $3])
Scan(table: [hr, emps])
{code}
However, its rowtype is derived from its input(Project(projects: [$0, $1, $3])):
{code:java}
RecordType(JavaType(class java.lang.Integer) empid, JavaType(class
java.lang.Integer) deptno, BIGINT $f2){code}
> AggregateOnProjectToAggregateUnifyRule cannot ignore Project when its Mapping
> breaks ordering
> ---------------------------------------------------------------------------------------------
>
> Key: CALCITE-3087
> URL: https://issues.apache.org/jira/browse/CALCITE-3087
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Haisheng Yuan
> Assignee: Feng Zhu
> Priority: Major
> Labels: pull-request-available
> Time Spent: 20m
> Remaining Estimate: 0h
>
> Add the following test to MaterializationTest:
> {code:java}
> @Test public void testAggregateGroupSetsRollUp0() {
> checkMaterialize(
> "select \"empid\", \"deptno\", count(*) as c, sum(\"salary\") as s
> from \"emps\" "
> + "group by \"empid\", \"deptno\"",
> "select count(*) + 1 as c, \"deptno\" from \"emps\" group by
> cube(\"deptno\", \"empid\")",
> HR_FKUK_MODEL,
> CalciteAssert.checkResultContains(
> "EnumerableCalc(expr#0..2=[{inputs}], expr#3=[1], "
> + "expr#4=[+($t2, $t3)], C=[$t4], deptno=[$t1])\n"
> + " EnumerableAggregate(group=[{0, 1}], groups=[[{0, 1},
> {0}, {1}, {}]], agg#0=[$SUM0($2)])\n"
> + " EnumerableTableScan(table=[[hr, m0]])"));
> }
> {code}
> We got error:
> {code:java}
> Caused by: java.lang.IllegalArgumentException: must be sorted: [{0, 1}, {1},
> {0}, {}]
> at
> org.apache.calcite.rel.core.Aggregate$Group.induce(Aggregate.java:472)
> at
> org.apache.calcite.rel.mutable.MutableAggregate.getGroupType(MutableAggregate.java:83)
> at
> org.apache.calcite.plan.SubstitutionVisitor.unifyAggregates(SubstitutionVisitor.java:1281)
> at
> org.apache.calcite.plan.SubstitutionVisitor$AggregateOnProjectToAggregateUnifyRule.apply(SubstitutionVisitor.java:1345)
> at
> org.apache.calcite.plan.SubstitutionVisitor.go(SubstitutionVisitor.java:531)
> at
> org.apache.calcite.plan.SubstitutionVisitor.go(SubstitutionVisitor.java:466)
> at
> org.apache.calcite.plan.MaterializedViewSubstitutionVisitor.go(MaterializedViewSubstitutionVisitor.java:56)
> at
> org.apache.calcite.plan.RelOptMaterializations.substitute(RelOptMaterializations.java:200)
> at
> org.apache.calcite.plan.RelOptMaterializations.useMaterializedViews(RelOptMaterializations.java:72)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerMaterializations(VolcanoPlanner.java:348)
> at
> org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:584)
> {code}
> The reason is that Mappings.apply2 doesn't sort.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)