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();