You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by za...@apache.org on 2021/04/20 09:08:08 UTC

[calcite] branch master updated (b2e9e6c -> df95257)

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

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


    from b2e9e6c  [CALCITE-4564] Initialization context for non-static user-defined functions (UDFs)
     new 126dc76  [CALCITE-4583] Control simplification in `RelBuilder#filter` with `config.simplify()` (Jiatao Tao)
     new df95257  [CALCITE-4586] In piglet, allow creating a PigRelBuilder with custom `config.simplify()` (Jiatao Tao)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/calcite/tools/RelBuilder.java  | 29 ++++++++++++++--------
 .../org/apache/calcite/test/RelBuilderTest.java    | 24 +++++++++++++++++-
 .../org/apache/calcite/test/RelOptRulesTest.xml    |  5 ++--
 .../org/apache/calcite/piglet/PigRelBuilder.java   |  2 --
 .../java/org/apache/calcite/test/PigRelOpTest.java | 21 +++++++---------
 5 files changed, 53 insertions(+), 28 deletions(-)

[calcite] 02/02: [CALCITE-4586] In piglet, allow creating a PigRelBuilder with custom `config.simplify()` (Jiatao Tao)

Posted by za...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit df95257f357e67eac330ba4c6d6bc749851e99fb
Author: Jiatao Tao <24...@qq.com>
AuthorDate: Fri Apr 16 14:49:52 2021 +0800

    [CALCITE-4586] In piglet, allow creating a PigRelBuilder with custom `config.simplify()` (Jiatao Tao)
    
    Close apache/calcite#2398
---
 .../org/apache/calcite/piglet/PigRelBuilder.java    |  2 --
 .../java/org/apache/calcite/test/PigRelOpTest.java  | 21 +++++++++------------
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/piglet/src/main/java/org/apache/calcite/piglet/PigRelBuilder.java b/piglet/src/main/java/org/apache/calcite/piglet/PigRelBuilder.java
index 699bda0..6b60bee 100644
--- a/piglet/src/main/java/org/apache/calcite/piglet/PigRelBuilder.java
+++ b/piglet/src/main/java/org/apache/calcite/piglet/PigRelBuilder.java
@@ -35,7 +35,6 @@ import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
-import org.apache.calcite.runtime.Hook;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.type.MultisetSqlType;
 import org.apache.calcite.tools.FrameworkConfig;
@@ -83,7 +82,6 @@ public class PigRelBuilder extends RelBuilder {
   /** Creates a PigRelBuilder. */
   public static PigRelBuilder create(FrameworkConfig config) {
     final RelBuilder relBuilder = RelBuilder.create(config);
-    Hook.REL_BUILDER_SIMPLIFY.addThread(Hook.propertyJ(false));
     return new PigRelBuilder(
         transform(config.getContext(), c -> c.withBloat(-1)),
         relBuilder.getCluster(),
diff --git a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
index a2bdbfe..a457214 100644
--- a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
+++ b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
@@ -1454,9 +1454,8 @@ class PigRelOpTest extends PigRelTestBase {
         + "          LogicalTableScan(table=[[scott, EMP]])\n";
     final String optimizedPlan = ""
         + "LogicalSort(sort0=[$2], dir0=[ASC])\n"
-        + "  LogicalProject(group=[ROW($0, $1, $2)], $f1=[+(CAST($3):BIGINT, 1)], "
-        + "salSum=[CAST($4):DECIMAL(19, 0)], salAvg=[/(CAST($4):DECIMAL(19, 0), CAST(CAST($3)"
-        + ":BIGINT):DECIMAL(19, 0))])\n"
+        + "  LogicalProject(group=[ROW($0, $1, $2)], $f1=[+($3, 1)], salSum=[CAST($4):DECIMAL(19,"
+        + " 0)], salAvg=[/(CAST($4):DECIMAL(19, 0), CAST($3):DECIMAL(19, 0))])\n"
         + "    LogicalAggregate(group=[{0, 1, 2}], agg#0=[COUNT()], agg#1=[SUM($3)])\n"
         + "      LogicalProject(DEPTNO=[$7], MGR=[$3], HIREDATE=[$4], SAL=[$5])\n"
         + "        LogicalTableScan(table=[[scott, EMP]])\n";
@@ -1476,10 +1475,9 @@ class PigRelOpTest extends PigRelTestBase {
         + "({20, 7566, 1987-04-19},2,3000.00,3000.00)\n"
         + "({10, null, 1981-11-17},2,5000.00,5000.00)\n";
     final String sql = ""
-        + "SELECT ROW(DEPTNO, MGR, HIREDATE) AS group, CAST(COUNT(*) AS "
-        + "BIGINT) + 1 AS $f1, CAST(SUM(SAL) AS DECIMAL(19, 0)) AS salSum, "
-        + "CAST(SUM(SAL) AS DECIMAL(19, 0)) / CAST(CAST(COUNT(*) AS BIGINT) "
-        + "AS DECIMAL(19, 0)) AS salAvg\n"
+        + "SELECT ROW(DEPTNO, MGR, HIREDATE) AS group, COUNT(*) + 1 AS $f1, CAST(SUM(SAL) AS "
+        + "DECIMAL(19, 0)) AS salSum, CAST(SUM(SAL) AS DECIMAL(19, 0)) / CAST(COUNT(*) AS DECIMAL"
+        + "(19, 0)) AS salAvg\n"
         + "FROM scott.EMP\n"
         + "GROUP BY DEPTNO, MGR, HIREDATE\n"
         + "ORDER BY CAST(SUM(SAL) AS DECIMAL(19, 0))";
@@ -1497,11 +1495,10 @@ class PigRelOpTest extends PigRelTestBase {
         + "BigDecimalSum(A.SAL) / COUNT(A) as salAvg, A;\n"
         + "D = ORDER C BY salSum;\n";
     final String sql2 = ""
-        + "SELECT ROW(DEPTNO, MGR, HIREDATE) AS group, CAST(COUNT(*) AS BIGINT) + 1"
-        + " AS $f1, CAST(SUM(SAL) AS DECIMAL(19, 0)) AS salSum, CAST(SUM(SAL) AS "
-        + "DECIMAL(19, 0)) / CAST(CAST(COUNT(*) AS BIGINT) AS DECIMAL(19, 0)) AS "
-        + "salAvg, COLLECT(ROW(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)"
-        + ") AS A\n"
+        + "SELECT ROW(DEPTNO, MGR, HIREDATE) AS group, COUNT(*) + 1 AS $f1, CAST(SUM(SAL) AS "
+        + "DECIMAL(19, 0)) AS salSum, CAST(SUM(SAL) AS DECIMAL(19, 0)) / CAST(COUNT(*) AS DECIMAL"
+        + "(19, 0)) AS salAvg, COLLECT(ROW(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)) "
+        + "AS A\n"
         + "FROM scott.EMP\n"
         + "GROUP BY DEPTNO, MGR, HIREDATE\n"
         + "ORDER BY CAST(SUM(SAL) AS DECIMAL(19, 0))";

[calcite] 01/02: [CALCITE-4583] Control simplification in `RelBuilder#filter` with `config.simplify()` (Jiatao Tao)

Posted by za...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 126dc7692d8b3261fba20956093681688e44fe4a
Author: Jiatao Tao <24...@qq.com>
AuthorDate: Fri Apr 16 11:50:50 2021 +0800

    [CALCITE-4583] Control simplification in `RelBuilder#filter` with `config.simplify()` (Jiatao Tao)
    
    Close apache/calcite#2398
---
 .../java/org/apache/calcite/tools/RelBuilder.java  | 29 ++++++++++++++--------
 .../org/apache/calcite/test/RelBuilderTest.java    | 24 +++++++++++++++++-
 .../org/apache/calcite/test/RelOptRulesTest.xml    |  5 ++--
 3 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 04b7df6..ba1d362 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -1334,22 +1334,29 @@ public class RelBuilder {
    *
    * <p>The predicates are combined using AND,
    * and optimized in a similar way to the {@link #and} method.
-   * If the result is TRUE no filter is created. */
+   * If simplification is on and the result is TRUE, no filter is created. */
   public RelBuilder filter(Iterable<CorrelationId> variablesSet,
       Iterable<? extends RexNode> predicates) {
-    final RexNode simplifiedPredicates =
-        simplifier.simplifyFilterPredicates(predicates);
-    if (simplifiedPredicates == null) {
-      return empty();
+    final RexNode conjunctionPredicates;
+    if (config.simplify()) {
+      conjunctionPredicates = simplifier.simplifyFilterPredicates(predicates);
+    } else {
+      conjunctionPredicates =
+          RexUtil.composeConjunction(simplifier.rexBuilder, predicates);
     }
 
-    if (!simplifiedPredicates.isAlwaysTrue()) {
-      final Frame frame = stack.pop();
-      final RelNode filter =
-          struct.filterFactory.createFilter(frame.rel,
-              simplifiedPredicates, ImmutableSet.copyOf(variablesSet));
-      stack.push(new Frame(filter, frame.fields));
+    if (conjunctionPredicates == null || conjunctionPredicates.isAlwaysFalse()) {
+      return empty();
     }
+    if (conjunctionPredicates.isAlwaysTrue()) {
+      return this;
+    }
+
+    final Frame frame = stack.pop();
+    final RelNode filter =
+        struct.filterFactory.createFilter(frame.rel,
+            conjunctionPredicates, ImmutableSet.copyOf(variablesSet));
+    stack.push(new Frame(filter, frame.fields));
     return this;
   }
 
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index aee5b9d..b2995c6 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -3636,9 +3636,13 @@ public class RelBuilderTest {
     final String expected = ""
         + "LogicalFilter(condition=[OR(SEARCH($7, Sarg[10, 11, (15..+∞)]), =($2, 'CLERK'))])\n"
         + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    final String expectedWithoutSimplify = ""
+        + "LogicalFilter(condition=[OR(>($7, 15), SEARCH($2, Sarg['CLERK']:CHAR(5)), SEARCH($7, "
+        + "Sarg[10, 11, 20]))])\n"
+        + "  LogicalTableScan(table=[[scott, EMP]])\n";
     assertThat(f.apply(createBuilder()), hasTree(expected));
     assertThat(f.apply(createBuilder(c -> c.withSimplify(false))),
-        hasTree(expected));
+        hasTree(expectedWithoutSimplify));
   }
 
   /** Tests filter builder with correlation variables. */
@@ -3709,6 +3713,24 @@ public class RelBuilderTest {
     assertThat(root, hasTree("LogicalValues(tuples=[[]])\n"));
   }
 
+  @Test void testFilterWithoutSimplification() {
+    final RelBuilder builder = createBuilder(c -> c.withSimplify(false));
+    final RelNode root =
+        builder.scan("EMP")
+            .filter(
+                builder.or(
+                    builder.literal(null),
+                    builder.and(
+                        builder.equals(builder.field(2), builder.literal(1)),
+                        builder.equals(builder.field(2), builder.literal(2))
+                    )))
+            .build();
+    final String expected = ""
+        + "LogicalFilter(condition=[OR(null:NULL, AND(=($2, 1), =($2, 2)))])\n"
+        + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    assertThat(root, hasTree(expected));
+  }
+
   @Test void testRelBuilderToString() {
     final RelBuilder builder = RelBuilder.create(config().build());
     builder.scan("EMP");
diff --git a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index 3dc6ad2..c30446f 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -3622,7 +3622,8 @@ LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$
 LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])
   LogicalJoin(condition=[=($16, $7)], joinType=[inner])
     LogicalFilter(condition=[SEARCH($7, Sarg[(-∞..4), (4..6), (6..+∞)])])
-      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
+      LogicalFilter(condition=[NOT(OR(=($7, 4), =($7, 6)))])
+        LogicalTableScan(table=[[CATALOG, SALES, EMP]])
     LogicalFilter(condition=[SEARCH($7, Sarg[(-∞..4), (4..6), (6..+∞)])])
       LogicalTableScan(table=[[CATALOG, SALES, EMP]])
 ]]>
@@ -11862,7 +11863,7 @@ LogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])
             <![CDATA[
 LogicalProject(EMPNO=[$0])
   LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])
-    LogicalFilter(condition=[<($0, CASE(OR(AND(IS NOT NULL($12), <>($9, 0)), AND(<($10, $9), null, <>($9, 0), IS NULL($12))), 10, AND(OR(IS NULL($12), =($9, 0)), OR(>=($10, $9), =($9, 0), IS NOT NULL($12))), 20, 30))])
+    LogicalFilter(condition=[<($0, CASE(=(CASE(=($9, 0), false, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false), true), 10, =(CASE(=($9, 0), false, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false), false), 20, 30))])
       LogicalJoin(condition=[=($7, $11)], joinType=[left])
         LogicalJoin(condition=[true], joinType=[inner])
           LogicalTableScan(table=[[CATALOG, SALES, EMP]])