You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by li...@apache.org on 2022/11/05 08:28:31 UTC
[calcite] branch main updated: [CALCITE-5252] JDBC adapter sometimes misses parentheses around Query in WITH_ITEM body
This is an automated email from the ASF dual-hosted git repository.
libenchao 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 d3dbd3da4c [CALCITE-5252] JDBC adapter sometimes misses parentheses around Query in WITH_ITEM body
d3dbd3da4c is described below
commit d3dbd3da4c76556421e64f7ba90a5d39c89d23cf
Author: wumou.wm <wu...@alibaba-inc.com>
AuthorDate: Sat Sep 17 17:21:40 2022 +0800
[CALCITE-5252] JDBC adapter sometimes misses parentheses around Query in WITH_ITEM body
This closes #2952
---
.../java/org/apache/calcite/sql/SqlWithItem.java | 2 +-
.../apache/calcite/sql/parser/SqlParserTest.java | 54 ++++++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlWithItem.java b/core/src/main/java/org/apache/calcite/sql/SqlWithItem.java
index fe9de4f0b1..e68cc328f2 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlWithItem.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlWithItem.java
@@ -97,7 +97,7 @@ public class SqlWithItem extends SqlCall {
withItem.columnList.unparse(writer, getLeftPrec(), getRightPrec());
}
writer.keyword("AS");
- withItem.query.unparse(writer, 10, 10);
+ withItem.query.unparse(writer, MDX_PRECEDENCE, MDX_PRECEDENCE);
}
@SuppressWarnings("argument.type.incompatible")
diff --git a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index 520cb55b06..9ab85b88b4 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -2362,6 +2362,60 @@ public class SqlParserTest {
sql(sql).ok(expected);
}
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-5252">[CALCITE-5252]
+ * JDBC adapter sometimes miss parentheses around SELECT in WITH_ITEM body</a>. */
+ @Test void testWithAsUnion() {
+ final String sql = "with emp2 as (select * from emp union select * from emp)\n"
+ + "select * from emp2\n";
+ final String expected = "WITH `EMP2` AS (SELECT *\n"
+ + "FROM `EMP`\n"
+ + "UNION\n"
+ + "SELECT *\n"
+ + "FROM `EMP`) SELECT *\n"
+ + "FROM `EMP2`";
+ sql(sql).ok(expected);
+ }
+
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-5252">[CALCITE-5252]
+ * JDBC adapter sometimes miss parentheses around SELECT in WITH_ITEM body</a>. */
+ @Test void testWithAsOrderBy() {
+ final String sql = "with emp2 as (select * from emp order by deptno)\n"
+ + "select * from emp2\n";
+ final String expected = "WITH `EMP2` AS (SELECT *\n"
+ + "FROM `EMP`\n"
+ + "ORDER BY `DEPTNO`) SELECT *\n"
+ + "FROM `EMP2`";
+ sql(sql).ok(expected);
+ }
+
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-5252">[CALCITE-5252]
+ * JDBC adapter sometimes miss parentheses around SELECT in WITH_ITEM body</a>. */
+ @Test void testWithAsJoin() {
+ final String sql = "with emp2 as (select * from emp e1 join emp e2 on e1.deptno = e2.deptno)\n"
+ + "select * from emp2\n";
+ final String expected = "WITH `EMP2` AS (SELECT *\n"
+ + "FROM `EMP` AS `E1`\n"
+ + "INNER JOIN `EMP` AS `E2` ON (`E1`.`DEPTNO` = `E2`.`DEPTNO`)) SELECT *\n"
+ + "FROM `EMP2`";
+ sql(sql).ok(expected);
+ }
+
+ /** Test case for
+ * <a href="https://issues.apache.org/jira/browse/CALCITE-5252">[CALCITE-5252]
+ * JDBC adapter sometimes miss parentheses around SELECT in WITH_ITEM body</a>. */
+ @Test void testWithAsNestedInSubQuery() {
+ final String sql = "with emp3 as (with emp2 as (select * from emp) select * from emp2)\n"
+ + "select * from emp3\n";
+ final String expected = "WITH `EMP3` AS (WITH `EMP2` AS (SELECT *\n"
+ + "FROM `EMP`) SELECT *\n"
+ + "FROM `EMP2`) SELECT *\n"
+ + "FROM `EMP3`";
+ sql(sql).ok(expected);
+ }
+
@Test void testIdentifier() {
expr("ab").ok("`AB`");
expr(" \"a \"\" b!c\"").ok("`a \" b!c`");