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 5543694274 [CALCITE-7404] Incorrect Field Alias in MongoDB project 
Stage
5543694274 is described below

commit 5543694274e662730095d60d6080a5bb4a6b21af
Author: Terran <[email protected]>
AuthorDate: Wed Jan 28 18:36:08 2026 +0800

    [CALCITE-7404] Incorrect Field Alias in MongoDB project Stage
---
 .../calcite/adapter/mongodb/MongoProject.java      |  4 +-
 .../calcite/adapter/mongodb/MongoAdapterTest.java  | 47 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)

diff --git 
a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoProject.java 
b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoProject.java
index ee0721fe4a..a0d795aa0d 100644
--- a/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoProject.java
+++ b/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoProject.java
@@ -76,7 +76,9 @@ public MongoProject(RelOptCluster cluster, RelTraitSet 
traitSet,
             MongoRules.mongoFieldNames(getInput().getRowType()));
     final List<String> items = new ArrayList<>();
     for (Pair<RexNode, String> pair : getNamedProjects()) {
-      final String name = pair.right;
+      final String name = pair.right.startsWith("$f")
+          ? "_" + pair.right.substring(2)
+          : pair.right;
       final String expr = pair.left.accept(translator);
       items.add(expr.equals("'$" + name + "'")
           ? MongoRules.maybeQuote(name) + ": 1"
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 c562de6d9d..ce83c6e1d8 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
@@ -1046,4 +1046,51 @@ private static Consumer<List> mongoChecker(final 
String... expected) {
                 "{$group:{_id:{},_0:{$min:'$POP'}}}",
                 "{$project:{EXPR$0:{$abs:['$_0']}}}"));
   }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7404";>[CALCITE-7404]
+   * Incorrect Field Alias in MongoDB project Stage</a>. */
+  @Test void testAggFunctionMinFilter() {
+    assertModel(MODEL)
+        .query("select min(pop>5000) as pop_result from zips")
+        .queryContains(
+            mongoChecker(
+                "{$project:{_0:{$gt:['$pop',{$literal:5000}]}}}",
+                "{$group:{_id: {},POP_RESULT:{$min:'$_0'}}}"))
+        .returns("POP_RESULT=false\n");
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7404";>[CALCITE-7404]
+   * Incorrect Field Alias in MongoDB project Stage</a>. */
+  @Test void testAliasNameOrderBy() {
+    assertModel(MODEL)
+        .query("select pop as pop_a from zips"
+            + " order by pop_a")
+        .limit(3)
+        .queryContains(
+            mongoChecker(
+                "{$project:{POP_A:'$pop'}}",
+                "{$sort: {POP_A: 1}}"))
+        .returnsOrdered("POP_A=21",
+            "POP_A=17522",
+            "POP_A=22576");
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-7404";>[CALCITE-7404]
+   * Incorrect Field Alias in MongoDB project Stage</a>. */
+  @Test void testNameOrderBy() {
+    assertModel(MODEL)
+        .query("select pop as pop_a from zips"
+            + " order by pop")
+        .limit(3)
+        .queryContains(
+            mongoChecker(
+                "{$project:{POP_A:'$pop'}}",
+                "{$sort: {POP_A: 1}}"))
+        .returnsOrdered("POP_A=21",
+            "POP_A=17522",
+            "POP_A=22576");
+  }
 }

Reply via email to