yanjing.wang created CALCITE-5185: ------------------------------------- Summary: The required parentheses for WITH ITEM QUERY are missing when SqlPrettyWriter.config().withAlwaysUseParentheses(false) Key: CALCITE-5185 URL: https://issues.apache.org/jira/browse/CALCITE-5185 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.30.0 Reporter: yanjing.wang Assignee: yanjing.wang
Add the following test to SqlParserTest {code:java} @Test void testWithUnion2() { // Per the standard WITH ... SELECT ... UNION is valid even without parens. final String sql = "with emp2 as (select * from emp union all select * from emp)\n" + "select * from emp2\n" + "union\n" + "select * from emp2\n"; final String expected = "WITH `EMP2` AS (SELECT *\n" + "FROM `EMP`\n" + "UNION ALL\n" + "SELECT *\n" + "FROM `EMP`) (SELECT *\n" + "FROM `EMP2`\n" + "UNION\n" + "SELECT *\n" + "FROM `EMP2`)"; sql(sql).ok(expected); } {code} when I change SqlPrettyWriter.config().withAlwaysUseParentheses(true) to .withAlwaysUseParentheses(false), the actual sql is {code:java} WITH `EMP2` AS SELECT * FROM `EMP` UNION ALL SELECT * FROM `EMP` (SELECT * FROM `EMP2` UNION SELECT * FROM `EMP2`) {code} the sql can't be parsed by Calcite, PostgreSQL, BigQuery because WITH ITEM QUERY isn't wrapped by parentheses. In addition, It should be better to issue a newline between WITH ITEM QUERYs and QUERY BODY. -- This message was sent by Atlassian Jira (v8.20.7#820007)