Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
Description
This seems to stem from
.addRuleInstance(this.aggregateProjectPullUpConstantsRule)
If commented out, the bug does not occur. Also, when that line is commented out, all tests in `MaterializationTest.java` pass. The following test demonstrates the issue (fails on master, passes with line commented out):
@Test public void testAggregateMaterializationWithConstantFilter() { checkMaterialize( "select \"deptno\", \"name\", count(*) as c\n" + "from \"depts\" group by \"name\", \"deptno\"", "select \"name\", count(*) as c\n" + "from \"depts\" where \"name\" = 'a_name' group by \"name\""); }
From my understanding, the materialization fails to be used because `aggregateProjectPullUpConstantsRule` rewrites the Aggregate in `topNode` at https://github.com/apache/calcite/blob/d6fb6abd9a17b81a5d8d592860ecd5c2f20ce9b1/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java#L1743 to not include the known constant "name" in its group set, rather groups on just deptno and then projects `'a_name'` as a constant. This make that aggregate no longer a superset of the query aggregate and `rewriteView` then fails to properly match the aggregates.
Attachments
Issue Links
- is related to
-
CALCITE-1048 Make metadata more robust
- Open