This is an automated email from the ASF dual-hosted git repository.
mbudiu 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 0f93186cc7 [CALCITE-6618] Support NOT EQUALS operator in Arrow adapter
0f93186cc7 is described below
commit 0f93186cc76525dd5aeaf4b71ca2aab0ca9325db
Author: Cancai Cai <[email protected]>
AuthorDate: Tue Oct 8 22:52:07 2024 +0800
[CALCITE-6618] Support NOT EQUALS operator in Arrow adapter
---
.../calcite/adapter/arrow/ArrowTranslator.java | 2 +
.../calcite/adapter/arrow/ArrowAdapterTest.java | 62 ++++++++++++++++++++++
2 files changed, 64 insertions(+)
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 d531e333cf..2137976265 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
@@ -119,6 +119,8 @@ class ArrowTranslator {
switch (node.getKind()) {
case EQUALS:
return translateBinary("equal", "=", (RexCall) node);
+ case NOT_EQUALS:
+ return translateBinary("not_equal", "<>", (RexCall) node);
case LESS_THAN:
return translateBinary("less_than", ">", (RexCall) node);
case LESS_THAN_OR_EQUAL:
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 05bc053afc..2098a62e30 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
@@ -334,6 +334,68 @@ class ArrowAdapterTest {
.explainContains(plan);
}
+ @Test void testArrowProjectFieldsWithEqualFilter() {
+ String sql = "select \"intField\", \"stringField\"\n"
+ + "from arrowdata\n"
+ + "where \"intField\" = 12";
+ String plan = "PLAN=ArrowToEnumerableConverter\n"
+ + " ArrowProject(intField=[$0], stringField=[$1])\n"
+ + " ArrowFilter(condition=[=($0, 12)])\n"
+ + " ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 1, 2,
3]])\n\n";
+ String result = "intField=12; stringField=12\n";
+
+ CalciteAssert.that()
+ .with(arrow)
+ .query(sql)
+ .returns(result)
+ .explainContains(plan);
+ }
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6618">[CALCITE-6618]
+ * Support Not Equal in Arrow adapterr</a>. */
+ @Test void testArrowProjectFieldsWithNotEqualFilter() {
+ String sql = "select \"intField\", \"stringField\"\n"
+ + "from arrowdata\n"
+ + "where \"intField\" <> 12";
+ String plan = "PLAN=ArrowToEnumerableConverter\n"
+ + " ArrowProject(intField=[$0], stringField=[$1])\n"
+ + " ArrowFilter(condition=[<>($0, 12)])\n"
+ + " ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 1, 2,
3]])\n\n";
+ String result = "intField=0; stringField=0\n"
+ + "intField=1; stringField=1\n"
+ + "intField=2; stringField=2\n"
+ + "intField=3; stringField=3\n"
+ + "intField=4; stringField=4\n"
+ + "intField=5; stringField=5\n";
+
+ CalciteAssert.that()
+ .with(arrow)
+ .query(sql)
+ .limit(6)
+ .returns(result)
+ .explainContains(plan);
+ }
+
+ @Test void testArrowProjectFieldsWithBetweenFilter() {
+ String sql = "select \"intField\", \"stringField\"\n"
+ + "from arrowdata\n"
+ + "where \"intField\" between 1 and 3";
+ String plan = "PLAN=ArrowToEnumerableConverter\n"
+ + " ArrowProject(intField=[$0], stringField=[$1])\n"
+ + " ArrowFilter(condition=[SEARCH($0, Sarg[[1..3]])])\n"
+ + " ArrowTableScan(table=[[ARROW, ARROWDATA]], fields=[[0, 1, 2,
3]])\n\n";
+ String result = "intField=1; stringField=1\n"
+ + "intField=2; stringField=2\n"
+ + "intField=3; stringField=3\n";
+
+ CalciteAssert.that()
+ .with(arrow)
+ .query(sql)
+ .returns(result)
+ .explainContains(plan);
+ }
+
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-6296">[CALCITE-6296]
* Support IS NULL in Arrow adapter</a>. */