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

vozerov 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 d81c0e057 [CALCITE-5083] In RelBuilder.project_, do not unwrap SARGs
d81c0e057 is described below

commit d81c0e057b46969f0887c272b01ece60f23936a1
Author: Vladimir Ozerov <[email protected]>
AuthorDate: Mon Apr 4 22:38:53 2022 +0300

    [CALCITE-5083] In RelBuilder.project_, do not unwrap SARGs
---
 .../main/java/org/apache/calcite/tools/RelBuilder.java |  7 +------
 .../calcite/test/MaterializedViewRelOptRulesTest.java  |  8 ++++----
 .../java/org/apache/calcite/test/RelBuilderTest.java   | 18 ++++++++++++++++++
 3 files changed, 23 insertions(+), 10 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 1bcacf3f6..f141968a1 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -1940,13 +1940,8 @@ public class RelBuilder {
 
     // Simplify expressions.
     if (config.simplify()) {
-      final RexShuttle shuttle =
-          RexUtil.searchShuttle(getRexBuilder(), null, 2);
       for (int i = 0; i < nodeList.size(); i++) {
-        final RexNode node0 = nodeList.get(i);
-        final RexNode node1 = simplifier.simplifyPreservingType(node0);
-        final RexNode node2 = node1.accept(shuttle);
-        nodeList.set(i, node2);
+        nodeList.set(i, simplifier.simplifyPreservingType(nodeList.get(i)));
       }
     }
 
diff --git 
a/core/src/test/java/org/apache/calcite/test/MaterializedViewRelOptRulesTest.java
 
b/core/src/test/java/org/apache/calcite/test/MaterializedViewRelOptRulesTest.java
index 0dbf876c8..ccbb85141 100644
--- 
a/core/src/test/java/org/apache/calcite/test/MaterializedViewRelOptRulesTest.java
+++ 
b/core/src/test/java/org/apache/calcite/test/MaterializedViewRelOptRulesTest.java
@@ -1058,8 +1058,8 @@ class MaterializedViewRelOptRulesTest {
             + " where s.\"store_id\" = 1")
         .withDefaultSchemaSpec(CalciteAssert.SchemaSpec.JDBC_FOODMART)
         .checkingThatResultContains(""
-            + "EnumerableCalc(expr#0..7=[{inputs}], expr#8=[1], 
expr#9=[>=($t1, $t8)],"
-            + " expr#10=[3], expr#11=[<=($t1, $t10)], expr#12=[AND($t9, 
$t11)], $f0=[$t12])\n"
+            + "EnumerableCalc(expr#0..7=[{inputs}], expr#8=[Sarg[[1..3]]], "
+            + "expr#9=[SEARCH($t1, $t8)], $f0=[$t9])\n"
             + "  EnumerableTableScan(table=[[foodmart, MV0]])")
         .ok();
   }
@@ -1075,8 +1075,8 @@ class MaterializedViewRelOptRulesTest {
             + " where s.\"store_id\" = 1")
         .withDefaultSchemaSpec(CalciteAssert.SchemaSpec.JDBC_FOODMART)
         .checkingThatResultContains(""
-            + "EnumerableCalc(expr#0..17=[{inputs}], expr#18=[1], 
expr#19=[>=($t8, $t18)], "
-            + "expr#20=[3], expr#21=[<=($t8, $t20)], expr#22=[AND($t19, 
$t21)], $f0=[$t22])\n"
+            + "EnumerableCalc(expr#0..17=[{inputs}], expr#18=[Sarg[[1..3]]], "
+            + "expr#19=[SEARCH($t8, $t18)], $f0=[$t19])\n"
             + "  EnumerableTableScan(table=[[foodmart, MV0]])")
         .ok();
   }
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 8cce18d76..5851dcbfe 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -3059,6 +3059,24 @@ public class RelBuilderTest {
     assertThat(ex.getMessage(), allOf(containsString("Expression"), 
containsString("not found")));
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-5083";>[CALCITE-5083]
+   * In RelBuilder.project_, do not unwrap SARGs</a>. */
+  @Test void testProjectWithSarg() {
+    final RelBuilder builder = RelBuilder.create(config().build());
+    RelNode root =
+        builder.scan("EMP")
+            .project(
+                builder.between(
+                    builder.field("DEPTNO"),
+                    builder.literal(20),
+                    builder.literal(30)))
+            .build();
+    final String expected = "LogicalProject($f0=[SEARCH($7, 
Sarg[[20..30]])])\n"
+        + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    assertThat(root, hasTree(expected));
+  }
+
   /** Test case for
    * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4409";>[CALCITE-4409]
    * Improve exception when RelBuilder tries to create a field on a non-struct 
expression</a>. */

Reply via email to