Repository: calcite Updated Branches: refs/heads/master fa19580ec -> 73e57ad48
[CALCITE-2137] Materialized view rewriting not being triggered for some join queries Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/73e57ad4 Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/73e57ad4 Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/73e57ad4 Branch: refs/heads/master Commit: 73e57ad482b030368b8048874bc1f9159ecc42c4 Parents: fa19580 Author: Jesus Camacho Rodriguez <[email protected]> Authored: Tue Jan 16 19:22:44 2018 -0800 Committer: Jesus Camacho Rodriguez <[email protected]> Committed: Tue Jan 16 19:24:35 2018 -0800 ---------------------------------------------------------------------- .../rel/rules/AbstractMaterializedViewRule.java | 6 +++++- .../apache/calcite/test/MaterializationTest.java | 18 ++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/73e57ad4/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java index 3d997cb..1286224 100644 --- a/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java +++ b/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java @@ -746,7 +746,11 @@ public abstract class AbstractMaterializedViewRule extends RelOptRule { return null; } assert s.size() == 1; - exprsLineage.add(s.iterator().next()); + // Rewrite expr. Take first element from the corresponding equivalence class + // (no need to swap the table references following the table mapping) + exprsLineage.add( + RexUtil.swapColumnReferences(rexBuilder, + s.iterator().next(), queryEC.getEquivalenceClassesMap())); } List<RexNode> viewExprs = topViewProject == null ? extractReferences(rexBuilder, viewNode) http://git-wip-us.apache.org/repos/asf/calcite/blob/73e57ad4/core/src/test/java/org/apache/calcite/test/MaterializationTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/calcite/test/MaterializationTest.java b/core/src/test/java/org/apache/calcite/test/MaterializationTest.java index 04cbe62..1ff8393 100644 --- a/core/src/test/java/org/apache/calcite/test/MaterializationTest.java +++ b/core/src/test/java/org/apache/calcite/test/MaterializationTest.java @@ -1773,7 +1773,7 @@ public class MaterializationTest { + "where \"emps\".\"empid\" = 1", HR_FKUK_MODEL, CalciteAssert.checkResultContains( - "EnumerableCalc(expr#0..1=[{inputs}], empid=[$t0])\n" + "EnumerableCalc(expr#0..1=[{inputs}], empid0=[$t0])\n" + " EnumerableTableScan(table=[[hr, m0]])")); } @@ -1789,7 +1789,7 @@ public class MaterializationTest { + "where \"emps\".\"empid\" = 1", HR_FKUK_MODEL, CalciteAssert.checkResultContains( - "EnumerableCalc(expr#0..1=[{inputs}], empid=[$t0])\n" + "EnumerableCalc(expr#0..1=[{inputs}], empid0=[$t0])\n" + " EnumerableTableScan(table=[[hr, m0]])")); } @@ -1819,6 +1819,20 @@ public class MaterializationTest { HR_FKUK_MODEL); } + @Test public void testJoinMaterializationUKFK9() { + checkMaterialize( + "select * from \"emps\"\n" + + "join \"dependents\" using (\"empid\")", + "select \"emps\".\"empid\", \"dependents\".\"empid\", \"emps\".\"deptno\"\n" + + "from \"emps\"\n" + + "join \"dependents\" using (\"empid\")" + + "join \"depts\" \"a\" on (\"emps\".\"deptno\"=\"a\".\"deptno\")\n" + + "where \"emps\".\"name\" = 'Bill'", + HR_FKUK_MODEL, + CalciteAssert.checkResultContains( + "EnumerableTableScan(table=[[hr, m0]])")); + } + @Test public void testViewMaterialization() { checkThatMaterialize( "select \"depts\".\"name\"\n"
