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"

Reply via email to