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