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']}}}"));
+ }
}