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