Feng Zhu created CALCITE-3113: --------------------------------- Summary: Equivalent MutableAggregates with different row types fail with AssertionError Key: CALCITE-3113 URL: https://issues.apache.org/jira/browse/CALCITE-3113 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.19.0 Reporter: Feng Zhu
Add test case in MaterializationTest: {code:java} @Test public void testAggregateAlias() { checkMaterialize( "select count(*) as c from \"emps\" group by \"empid\"", "select count(*) + 1 as c from \"emps\" group by \"empid\""); } {code} It fails due to different rowtype. {code:java} java.lang.AssertionError at org.apache.calcite.plan.SubstitutionVisitor.go(SubstitutionVisitor.java:504) at org.apache.calcite.plan.SubstitutionVisitor.go(SubstitutionVisitor.java:465) 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:347) {code} However, according to MutableAggregate's hashCode&equals implementation, this materialization can be reused, i.e., queryDescedant=targetDescendant. {code:java} queryDescendant: RecordType(JavaType(int) empid, BIGINT $f1) ============================================================================= Aggregate(groupSet: {0}, groupSets: [{0}], calls: [COUNT()]) Project(projects: [$0]) Scan(table: [hr, emps]) targetDescendant: RecordType(JavaType(int) empid, BIGINT C) ============================================================================= Aggregate(groupSet: {0}, groupSets: [{0}], calls: [COUNT()]) Project(projects: [$0]) Scan(table: [hr, emps]) {code} So, how can we align them? -- This message was sent by Atlassian JIRA (v7.6.3#76005)