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

xuzifu666 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 383315bf50 [CALCITE-7406] Add abs function (enabled in Mongodb library)
383315bf50 is described below

commit 383315bf50b013d92c6787882b9681c430aefc49
Author: Terran <[email protected]>
AuthorDate: Sat Jan 31 17:27:53 2026 +0800

    [CALCITE-7406] Add abs function (enabled in Mongodb library)
---
 .../apache/calcite/adapter/mongodb/MongoRules.java |  1 +
 .../calcite/adapter/mongodb/MongoAdapterTest.java  | 45 ++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git 
a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java 
b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java
index fa10035746..47ad046c14 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoRules.java
@@ -151,6 +151,7 @@ static class RexToMongoTranslator extends 
RexVisitorImpl<String> {
       MONGO_OPERATORS.put(SqlStdOperatorTable.GREATER_THAN_OR_EQUAL, "$gte");
       MONGO_OPERATORS.put(SqlStdOperatorTable.LESS_THAN, "$lt");
       MONGO_OPERATORS.put(SqlStdOperatorTable.LESS_THAN_OR_EQUAL, "$lte");
+      MONGO_OPERATORS.put(SqlStdOperatorTable.ABS, "$abs");
     }
 
     protected RexToMongoTranslator(JavaTypeFactory typeFactory,
diff --git 
a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
 
b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
index a7b483cc99..c562de6d9d 100644
--- 
a/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
+++ 
b/mongodb/src/test/java/org/apache/calcite/adapter/mongodb/MongoAdapterTest.java
@@ -1001,4 +1001,49 @@ private static Consumer<List> mongoChecker(final 
String... expected) {
                 "{$sort: {CITY: 1}}"))
         .returnsOrdered("");
   }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7406";>[CALCITE-7406]
+   * Add abs function (enabled in Mongodb library)</a>. */
+  @Test void testAbs() {
+    assertModel(MODEL)
+        .query("select abs(pop) from zips")
+        .runs()
+        .queryContains(
+            mongoChecker(
+                "{$project:{EXPR$0:{$abs:['$pop']}}}"));
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7406";>[CALCITE-7406]
+   * Add abs function (enabled in Mongodb library)</a>. */
+  @Test void testAbsAlias() {
+    assertModel(MODEL)
+        .query("select abs(pop) as pop_result from zips"
+            + " order by pop")
+        .limit(3)
+        .runs()
+        .queryContains(
+            mongoChecker(
+                "{$project:{POP_RESULT:{$abs:['$pop']},POP:'$pop'}}",
+                "{$sort:{POP:1}}"))
+        .returnsOrdered(
+            "POP_RESULT=21",
+            "POP_RESULT=17522",
+            "POP_RESULT=22576");
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7406";>[CALCITE-7406]
+   * Add abs function (enabled in Mongodb library)</a>. */
+  @Test void testAbsMin() {
+    assertModel(MODEL)
+        .query("select abs(min(pop)) from zips")
+        .returnsOrdered("EXPR$0=21")
+        .queryContains(
+            mongoChecker(
+                "{$project:{POP:'$pop'}}",
+                "{$group:{_id:{},_0:{$min:'$POP'}}}",
+                "{$project:{EXPR$0:{$abs:['$_0']}}}"));
+  }
 }

Reply via email to