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