Anton Haidai created CALCITE-3537:
-------------------------------------

             Summary: Can't apply materialized view with a simple filter
                 Key: CALCITE-3537
                 URL: https://issues.apache.org/jira/browse/CALCITE-3537
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.21.0
            Reporter: Anton Haidai


The issue is reproducible in MaterializationTest:
{code}
  @Test public void testMvPredicate() {
      CalciteAssert.that()
              .withMaterializations(
                      HR_FKUK_MODEL,
                      "MyMv",
                      "select \"deptno\", \"name\", \"empid\", count(*) from 
\"emps\" group by  \"name\", \"deptno\", \"empid\" "
              )
              .query([INSERT SQL HERE])
              .enableMaterializations(true)
              .explainContains("MyMv")
              .sameResultWithMaterializationsDisabled();
  }
{code}

"[INSERT SQL HERE]" can be substituted by the following SQLs:

*Case 1: simple filter over a non-group field.*
Result: Success.
{code}
"select \"name\", count(*) from \"emps\" where \"deptno\"= 10  group by 
\"name\" "
{code}

*Case 2: complex filter over group field.*
Result: Success.
{code}
"select \"name\", count(*) from \"emps\" where \"name\"= 'Sebastian' OR 
\"name\"= 'Peter'  group by \"name\" "
{code}

*Case 3: complex filter on group field*
Result: Fail
{code}
"select \"name\", count(*) from \"emps\" where \"name\"= 'Sebastian' group by 
\"name\" "
{code}
The simple filtering condition makes the materialized view unusable while it 
could be used just like in the *Case 2*:
{code}
java.lang.AssertionError: 
Expected: a string containing "MyMv"
     but: was "PLAN=EnumerableAggregate(group=[{2}], EXPR$1=[COUNT()])\n  
EnumerableCalc(expr#0..4=[{inputs}], expr#5=[CAST($t2):VARCHAR], 
expr#6=['Sebastian':VARCHAR], expr#7=[=($t5, $t6)], proj#0..4=[{exprs}], 
$condition=[$t7])\n    EnumerableTableScan(table=[[hr, emps]])\n\n"
{code}

Looks like something is wrong with "compensationPreds" calculation in 
AbstractMaterializedViewRule.





--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to