This is an automated email from the ASF dual-hosted git repository.
zhaohui 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 e84a476d5 [CALCITE-5179] In RelToSqlConverter, AssertionError for
values with more than two items when SqlDialect#supportsAliasedValues is false
e84a476d5 is described below
commit e84a476d5dcbccab41e733fb3a61efaae5ab2c35
Author: xiejiajun <[email protected]>
AuthorDate: Sat Jun 4 16:01:41 2022 +0800
[CALCITE-5179] In RelToSqlConverter, AssertionError for values with more
than two items when SqlDialect#supportsAliasedValues is false
---
.../apache/calcite/rel/rel2sql/RelToSqlConverter.java | 6 ++++--
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 17 +++++++++++++++++
2 files changed, 21 insertions(+), 2 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 fc0e4c8db..dc0ca1287 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
@@ -799,8 +799,10 @@ public class RelToSqlConverter extends SqlImplementor
} else if (list.size() == 1) {
query = list.get(0);
} else {
- query = SqlStdOperatorTable.UNION_ALL.createCall(
- new SqlNodeList(list, POS));
+ query = list.stream()
+ .map(select -> (SqlNode) select)
+ .reduce((l, r) -> SqlStdOperatorTable.UNION_ALL.createCall(POS, l,
r))
+ .get();
}
} else {
// Generate ANSI syntax
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 f8eea9140..b077c37cd 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
@@ -5205,6 +5205,23 @@ class RelToSqlConverterTest {
.withSnowflake().ok(expectedSnowflake);
}
+ /**
+ * Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-5179">[CALCITE-5179]
+ * In RelToSqlConverter, AssertionError for values with more than two items
+ * when SqlDialect#supportsAliasedValues is false</a>.
+ */
+ @Test void testThreeValues() {
+ final String sql = "select * from (values (1), (2), (3)) as t(\"a\")\n";
+ sql(sql)
+ .withRedshift().ok("SELECT *\n"
+ + "FROM (SELECT 1 AS \"a\"\n"
+ + "UNION ALL\n"
+ + "SELECT 2 AS \"a\"\n"
+ + "UNION ALL\n"
+ + "SELECT 3 AS \"a\")");
+ }
+
@Test void testValuesEmpty() {
final String sql = "select *\n"
+ "from (values (1, 'a'), (2, 'bb')) as t(x, y)\n"