You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by ru...@apache.org on 2019/07/19 07:12:27 UTC

[calcite] branch master updated: [CALCITE-3182] Trim unused fields for plan of materialized-view before matching (Jin Xing)

This is an automated email from the ASF dual-hosted git repository.

rubenql pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new 58b6ad6  [CALCITE-3182] Trim unused fields for plan of materialized-view before matching (Jin Xing)
58b6ad6 is described below

commit 58b6ad6135d909c053f15fb902d8b73559d1fa53
Author: jinxing <ji...@gmail.com>
AuthorDate: Wed Jul 17 19:17:35 2019 +0800

    [CALCITE-3182] Trim unused fields for plan of materialized-view before matching (Jin Xing)
---
 .../org/apache/calcite/prepare/CalciteMaterializer.java   |  5 +++--
 .../java/org/apache/calcite/test/MaterializationTest.java | 15 ++++++++++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
index 855cc40..65fef8d 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
@@ -26,6 +26,7 @@ import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.RelRoot;
 import org.apache.calcite.rel.RelShuttle;
 import org.apache.calcite.rel.core.TableFunctionScan;
 import org.apache.calcite.rel.core.TableScan;
@@ -84,8 +85,8 @@ class CalciteMaterializer extends CalcitePrepareImpl.CalcitePreparingStmt {
     SqlToRelConverter sqlToRelConverter2 =
         getSqlToRelConverter(getSqlValidator(), catalogReader, config);
 
-    materialization.queryRel =
-        sqlToRelConverter2.convertQuery(node, true, true).rel;
+    RelRoot root = sqlToRelConverter2.convertQuery(node, true, true);
+    materialization.queryRel = trimUnusedFields(root).rel;
 
     // Identify and substitute a StarTable in queryRel.
     //
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 405d3a1..994241a 100644
--- a/core/src/test/java/org/apache/calcite/test/MaterializationTest.java
+++ b/core/src/test/java/org/apache/calcite/test/MaterializationTest.java
@@ -1883,7 +1883,7 @@ public class MaterializationTest {
         CalciteAssert.checkResultContains(
             "EnumerableCalc(expr#0..2=[{inputs}], empid=[$t1])\n"
                 + "  EnumerableHashJoin(condition=[=($0, $2)], joinType=[inner])\n"
-                + "    EnumerableCalc(expr#0=[{inputs}], expr#1=[CAST($t0):VARCHAR], name=[$t1])\n"
+                + "    EnumerableCalc(expr#0=[{inputs}], expr#1=[CAST($t0):VARCHAR], name00=[$t1])\n"
                 + "      EnumerableTableScan(table=[[hr, m0]])\n"
                 + "    EnumerableCalc(expr#0..1=[{inputs}], expr#2=[CAST($t1):VARCHAR], empid=[$t0], name0=[$t2])\n"
                 + "      EnumerableTableScan(table=[[hr, dependents]])"));
@@ -2417,6 +2417,19 @@ public class MaterializationTest {
     }
   }
 
+  @Test public void testMaterializationAfterTrimingOfUnusedFields() {
+    String sql =
+        "select \"y\".\"deptno\", \"y\".\"name\", \"x\".\"sum_salary\"\n"
+            + "from\n"
+            + "  (select \"deptno\", sum(\"salary\") \"sum_salary\"\n"
+            + "  from \"emps\"\n"
+            + "  group by \"deptno\") \"x\"\n"
+            + "  join\n"
+            + "  \"depts\" \"y\"\n"
+            + "  on \"x\".\"deptno\"=\"y\".\"deptno\"\n";
+    checkMaterialize(sql, sql);
+  }
+
   private static <E> List<List<List<E>>> list3(E[][][] as) {
     final ImmutableList.Builder<List<List<E>>> builder =
         ImmutableList.builder();