You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Steven Talbot (JIRA)" <ji...@apache.org> on 2019/03/11 19:40:00 UTC

[jira] [Updated] (CALCITE-2912) MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of constant filters

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

Steven Talbot updated CALCITE-2912:
-----------------------------------
    Summary: MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of constant filters  (was: MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of filter constants)

> MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of constant filters
> ------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-2912
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2912
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Steven Talbot
>            Priority: Major
>
> This seems to stem from 
> [https://github.com/apache/calcite/blob/d6fb6abd9a17b81a5d8d592860ecd5c2f20ce9b1/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java#L1735]
> {quote}.addRuleInstance(this.aggregateProjectPullUpConstantsRule)
> {quote}
> 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):
> {code:java}
> @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\"");
> }{code}
> 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.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)