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

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 2fbc3d0c7f4 IGNITE-26065 SQL Calcite: Fix "field names not distinct" 
assertion error - Fixes #12283.
2fbc3d0c7f4 is described below

commit 2fbc3d0c7f450144d1cba0e7f12442c4e986cf49
Author: Vladimir Steshin <[email protected]>
AuthorDate: Fri Sep 19 09:26:02 2025 +0300

    IGNITE-26065 SQL Calcite: Fix "field names not distinct" assertion error - 
Fixes #12283.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../query/calcite/prepare/PlannerHelper.java        | 12 +++---------
 .../query/calcite/planner/TableDmlPlannerTest.java  | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
index 12b9deed6e9..289a7b9b473 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
@@ -41,16 +41,14 @@ import org.apache.calcite.rel.core.Spool;
 import org.apache.calcite.rel.core.TableScan;
 import org.apache.calcite.rel.hint.Hintable;
 import org.apache.calcite.rel.hint.RelHint;
+import org.apache.calcite.rel.logical.LogicalProject;
 import org.apache.calcite.rel.rules.CoreRules;
 import org.apache.calcite.rel.rules.JoinCommuteRule;
 import org.apache.calcite.rel.rules.JoinPushThroughJoinRule;
 import org.apache.calcite.rel.rules.JoinToMultiJoinRule;
 import org.apache.calcite.rel.rules.MultiJoin;
-import org.apache.calcite.rex.RexBuilder;
-import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.processors.query.calcite.hint.HintDefinition;
@@ -152,13 +150,9 @@ public class PlannerHelper {
             IgniteRel igniteRel = planner.transform(PlannerPhase.OPTIMIZATION, 
desired, rel);
 
             if (!root.isRefTrivial()) {
-                final List<RexNode> projects = new ArrayList<>();
-                final RexBuilder rexBuilder = 
igniteRel.getCluster().getRexBuilder();
+                LogicalProject project = (LogicalProject)root.project();
 
-                for (int field : Pair.left(root.fields))
-                    projects.add(rexBuilder.makeInputRef(igniteRel, field));
-
-                igniteRel = new IgniteProject(igniteRel.getCluster(), desired, 
igniteRel, projects, root.validatedRowType);
+                igniteRel = new IgniteProject(igniteRel.getCluster(), desired, 
igniteRel, project.getProjects(), project.getRowType());
             }
 
             if (sqlNode.isA(ImmutableSet.of(SqlKind.INSERT, SqlKind.UPDATE, 
SqlKind.MERGE)))
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/TableDmlPlannerTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/TableDmlPlannerTest.java
index d08f5a743ae..c71d56a7357 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/TableDmlPlannerTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/TableDmlPlannerTest.java
@@ -27,6 +27,8 @@ import 
org.apache.ignite.internal.processors.query.calcite.schema.IgniteSchema;
 import 
org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
 import org.junit.Test;
 
+import static org.apache.calcite.sql.type.SqlTypeName.INTEGER;
+import static org.apache.calcite.sql.type.SqlTypeName.VARCHAR;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
@@ -169,4 +171,23 @@ public class TableDmlPlannerTest extends 
AbstractPlannerTest {
         assertThat(invalidPlanMsg, spool.readType, equalTo(Spool.Type.EAGER));
         assertThat(invalidPlanMsg, findFirstNode(phys, 
byClass(IgniteIndexScan.class)), notNullValue());
     }
+
+    /** Tests that queries with duplicated column names are correctly parsed. 
*/
+    @Test
+    public void testDuplicatedColumnNames() throws Exception {
+        IgniteSchema schema = createSchema(
+            createTable("CITY", IgniteDistributions.random(), "ID", INTEGER, 
"NAME", VARCHAR),
+            createTable("STREET", IgniteDistributions.random(), "ID", INTEGER, 
"CITY_ID", INTEGER,
+                "NAME", VARCHAR)
+        );
+
+        assertPlan("SELECT NAME, (SELECT NAME FROM CITY WHERE ID = S.CITY_ID 
LIMIT 1) AS NAME FROM STREET S ORDER BY ID",
+            schema, hasColumns("NAME", "NAME1"));
+
+        assertPlan("SELECT CITY_ID, NAME, NAME FROM STREET ORDER BY ID", 
schema,
+            hasColumns("CITY_ID", "NAME", "NAME2"));
+
+        assertPlan("SELECT CITY.NAME, STREET.NAME FROM STREET JOIN CITY ON 
STREET.CITY_ID = CITY.ID ORDER BY STREET.ID",
+            schema, hasColumns("NAME", "NAME1"));
+    }
 }

Reply via email to