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

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


The following commit(s) were added to refs/heads/main by this push:
     new f47ca1cb94 [CALCITE-6295] Support IS NOT NULL in Arrow adapter
f47ca1cb94 is described below

commit f47ca1cb9467c6c878a88f0cda6bf95fad2d5e99
Author: Tim Grein <[email protected]>
AuthorDate: Fri Jul 19 18:40:52 2024 +0200

    [CALCITE-6295] Support IS NOT NULL in Arrow adapter
---
 .../calcite/adapter/arrow/ArrowTranslator.java     |  2 +
 .../calcite/adapter/arrow/ArrowAdapterTest.java    | 47 ++++++++++++----------
 .../src/main/java/org/apache/calcite/util/Bug.java |  5 ---
 3 files changed, 28 insertions(+), 26 deletions(-)

diff --git 
a/arrow/src/main/java/org/apache/calcite/adapter/arrow/ArrowTranslator.java 
b/arrow/src/main/java/org/apache/calcite/adapter/arrow/ArrowTranslator.java
index 504a65a8d7..0015471d14 100644
--- a/arrow/src/main/java/org/apache/calcite/adapter/arrow/ArrowTranslator.java
+++ b/arrow/src/main/java/org/apache/calcite/adapter/arrow/ArrowTranslator.java
@@ -129,6 +129,8 @@ class ArrowTranslator {
       return translateBinary("greater_than_or_equal_to", "<=", (RexCall) node);
     case IS_NULL:
       return translateUnary("isnull", (RexCall) node);
+    case IS_NOT_NULL:
+      return translateUnary("isnotnull", (RexCall) node);
     default:
       throw new UnsupportedOperationException("Unsupported operator " + node);
     }
diff --git 
a/arrow/src/test/java/org/apache/calcite/adapter/arrow/ArrowAdapterTest.java 
b/arrow/src/test/java/org/apache/calcite/adapter/arrow/ArrowAdapterTest.java
index 091ee5b015..3158d0011a 100644
--- a/arrow/src/test/java/org/apache/calcite/adapter/arrow/ArrowAdapterTest.java
+++ b/arrow/src/test/java/org/apache/calcite/adapter/arrow/ArrowAdapterTest.java
@@ -294,34 +294,39 @@ class ArrowAdapterTest {
         .explainContains(plan);
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6295";>[CALCITE-6295]
+   * Support IS NOT NULL in Arrow adapter</a>. */
   @Test void testArrowProjectFieldsWithIsNotNullFilter() {
     String sql = "select \"intField\", \"stringField\"\n"
         + "from arrowdata\n"
-        + "where \"intField\" is not null\n"
-        + "order by \"intField\"\n"
-        + "limit 1";
-    String plan;
-    if (Bug.CALCITE_6295_FIXED) {
-      plan = "PLAN=EnumerableLimit(fetch=[1])\n"
-          + "  EnumerableSort(sort0=[$0], dir0=[ASC])\n"
-          + "    ArrowToEnumerableConverter\n"
-          + "      ArrowProject(intField=[$0], stringField=[$1])\n"
-          + "        ArrowFilter(condition=[IS NOT NULL($0)])\n"
-          + "          ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 
1, 2, 3]])\n\n";
-    } else {
-      plan = "PLAN=EnumerableCalc(expr#0..3=[{inputs}], proj#0..1=[{exprs}])\n"
-          + "  EnumerableLimit(fetch=[1])\n"
-          + "    EnumerableSort(sort0=[$0], dir0=[ASC])\n"
-          + "      EnumerableCalc(expr#0..3=[{inputs}], expr#4=[IS NOT 
NULL($t0)], proj#0..3=[{exprs}], $condition=[$t4])\n"
-          + "        ArrowToEnumerableConverter\n"
-          + "          ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 
1, 2, 3]])\n\n";
-    }
-    String result = "intField=0; stringField=0\n";
+        + "where \"intField\" is not null\n";
+    String plan = "PLAN=ArrowToEnumerableConverter\n"
+          + "  ArrowProject(intField=[$0], stringField=[$1])\n"
+          + "    ArrowFilter(condition=[IS NOT NULL($0)])\n"
+          + "      ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 1, 
2, 3]])\n\n";
 
     CalciteAssert.that()
         .with(arrow)
         .query(sql)
-        .returns(result)
+        .returnsCount(50)
+        .explainContains(plan);
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6295";>[CALCITE-6295]
+   * Support IS NOT NULL in Arrow adapter</a>. */
+  @Test void testConjunctiveIsNotNullFilters() {
+    String sql = "select * from arrowdata\n"
+        + "where \"intField\" is not null and \"stringField\" is not null";
+    String plan = "PLAN=ArrowToEnumerableConverter\n"
+        + "  ArrowFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])\n"
+        + "    ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 1, 2, 
3]])\n\n";
+
+    CalciteAssert.that()
+        .with(arrow)
+        .query(sql)
+        .returnsCount(50)
         .explainContains(plan);
   }
 
diff --git a/core/src/main/java/org/apache/calcite/util/Bug.java 
b/core/src/main/java/org/apache/calcite/util/Bug.java
index e5b79bab1a..3c39697816 100644
--- a/core/src/main/java/org/apache/calcite/util/Bug.java
+++ b/core/src/main/java/org/apache/calcite/util/Bug.java
@@ -231,11 +231,6 @@ public abstract class Bug {
    * [CALCITE-6294] Support IN filter in Arrow adapter</a> is fixed. */
   public static final boolean CALCITE_6294_FIXED = false;
 
-  /** Whether
-   * <a 
href="https://issues.apache.org/jira/browse/CALCITE/issues/CALCITE-6295";>
-   * [CALCITE-6295] Support IS NOT NULL in Arrow adapter</a> is fixed. */
-  public static final boolean CALCITE_6295_FIXED = false;
-
   /**
    * Use this to flag temporary code.
    */

Reply via email to