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

mbudiu 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 91ec8d0529 [CALCITE-6833] JDBC adapter generates invalid table alias 
for semi-join in UNION
91ec8d0529 is described below

commit 91ec8d052924ba74ffdad4f0785477f7e1b6793a
Author: suibianwanwan <[email protected]>
AuthorDate: Thu Feb 20 18:59:53 2025 +0800

    [CALCITE-6833] JDBC adapter generates invalid table alias for semi-join in 
UNION
---
 .../java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java   | 9 +++++----
 .../org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java    | 9 ++++-----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java 
b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
index 1f26b850ce..ab6ec06b32 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/RelToSqlConverter.java
@@ -311,10 +311,11 @@ protected Result visitAntiOrSemiJoin(Join e) {
               sqlCondition);
     }
     sqlSelect.setWhere(sqlCondition);
-    final SqlNode resultNode =
-        leftResult.neededAlias == null ? sqlSelect
-            : as(sqlSelect, leftResult.neededAlias);
-    return result(resultNode,  ImmutableList.of(Clause.FROM), e, null);
+
+    if (leftResult.neededAlias != null && sqlSelect.getFrom() != null) {
+      sqlSelect.setFrom(as(sqlSelect.getFrom(), leftResult.neededAlias));
+    }
+    return result(sqlSelect, ImmutableList.of(Clause.FROM), e, null);
   }
 
   /** Returns whether this join should be unparsed as a {@link JoinType#COMMA}.
diff --git 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 661e14d07f..1d9d3cfd40 100644
--- 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -1762,8 +1762,8 @@ private static String toSql(RelNode root, SqlDialect 
dialect,
   }
 
   /** Test case for
-   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-5395";>[CALCITE-5395]
-   * RelToSql converter fails when SELECT * is under a semi-join node</a>. */
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6833";>[CALCITE-6833]
+   * JDBC adapter generates invalid table alias for semi-join in UNION</a>. */
   @Test void testUnionUnderSemiJoinNode() {
     final RelBuilder builder = relBuilder();
     final RelNode base = builder
@@ -1781,15 +1781,14 @@ private static String toSql(RelNode root, SqlDialect 
dialect,
         .project(builder.field("DEPTNO"))
         .build();
     final String expectedSql = "SELECT \"DEPTNO\"\n"
-        + "FROM (SELECT *\n"
         + "FROM (SELECT *\n"
         + "FROM \"scott\".\"EMP\"\n"
         + "UNION ALL\n"
         + "SELECT *\n"
-        + "FROM \"scott\".\"EMP\")\n"
+        + "FROM \"scott\".\"EMP\") AS \"t\"\n"
         + "WHERE EXISTS (SELECT 1\n"
         + "FROM \"scott\".\"DEPT\"\n"
-        + "WHERE \"t\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\")) AS \"t\"";
+        + "WHERE \"t\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\")";
     assertThat(toSql(root), isLinux(expectedSql));
   }
 

Reply via email to