This is an automated email from the ASF dual-hosted git repository.
jiajunxie 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 db192e92a5 [CALCITE-6102] SqlWriter in SqlInsert's unparse start a
list but does not end it
db192e92a5 is described below
commit db192e92a5ff0a8688b6f24027d5a6c2bb92f792
Author: jiefei <[email protected]>
AuthorDate: Fri Nov 10 17:56:52 2023 +0800
[CALCITE-6102] SqlWriter in SqlInsert's unparse start a list but does not
end it
---
.../java/org/apache/calcite/sql/SqlInsert.java | 3 ++-
.../calcite/sql/test/SqlPrettyWriterTest.java | 24 ++++++++++++++++++++++
.../calcite/sql/test/SqlPrettyWriterTest.xml | 7 +++++++
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
b/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
index 699298b0ff..f95932bfbf 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlInsert.java
@@ -150,7 +150,7 @@ public class SqlInsert extends SqlCall {
}
@Override public void unparse(SqlWriter writer, int leftPrec, int rightPrec)
{
- writer.startList(SqlWriter.FrameTypeEnum.SELECT);
+ final SqlWriter.Frame frame =
writer.startList(SqlWriter.FrameTypeEnum.SELECT);
writer.sep(isUpsert() ? "UPSERT INTO" : "INSERT INTO");
final int opLeft = getOperator().getLeftPrec();
final int opRight = getOperator().getRightPrec();
@@ -160,6 +160,7 @@ public class SqlInsert extends SqlCall {
}
writer.newlineAndIndent();
source.unparse(writer, 0, 0);
+ writer.endList(frame);
}
@Override public void validate(SqlValidator validator, SqlValidatorScope
scope) {
diff --git
a/core/src/test/java/org/apache/calcite/sql/test/SqlPrettyWriterTest.java
b/core/src/test/java/org/apache/calcite/sql/test/SqlPrettyWriterTest.java
index 37cd6bab81..03c65fce99 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlPrettyWriterTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlPrettyWriterTest.java
@@ -18,6 +18,7 @@ package org.apache.calcite.sql.test;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.SqlWith;
import org.apache.calcite.sql.SqlWriter;
import org.apache.calcite.sql.SqlWriterConfig;
import org.apache.calcite.sql.parser.SqlParseException;
@@ -486,6 +487,29 @@ class SqlPrettyWriterTest {
.check();
}
+ @Test void testInsert() {
+ sql("insert into t1 select * from t2")
+ .check();
+ }
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6102">[CALCITE-6102]
+ * SqlWriter in SqlInsert's unparse start a list but does not end it</a>. */
+ @Test void testSqlWithBodyIsSqlInsert() throws SqlParseException {
+ final String withSql = "with tmp as (select * from t1) select 1";
+ final String insertSql = "insert into t2 select * from tmp";
+ final String expectedSql = "WITH `TMP` AS (SELECT *\n"
+ + "FROM `T1`) INSERT INTO `T2`\n"
+ + "SELECT *\n"
+ + "FROM `TMP`";
+ final SqlNode sqlInsert = SqlParser.create(insertSql).parseStmt();
+ final SqlNode sqlNode = SqlParser.create(withSql).parseQuery();
+ assertThat(sqlNode, instanceOf(SqlWith.class));
+ final SqlWith sqlWith = (SqlWith) sqlNode;
+ sqlWith.setOperand(1, sqlInsert);
+ assertThat(sqlWith, hasToString(isLinux(expectedSql)));
+ }
+
public static void main(String[] args) throws SqlParseException {
final String sql = "select x as a, b as b, c as c, d,"
+ " 'mixed-Case string',"
diff --git
a/core/src/test/resources/org/apache/calcite/sql/test/SqlPrettyWriterTest.xml
b/core/src/test/resources/org/apache/calcite/sql/test/SqlPrettyWriterTest.xml
index 965712f049..bf4d3a76b8 100644
---
a/core/src/test/resources/org/apache/calcite/sql/test/SqlPrettyWriterTest.xml
+++
b/core/src/test/resources/org/apache/calcite/sql/test/SqlPrettyWriterTest.xml
@@ -225,6 +225,13 @@ FROM `X`
INNER JOIN `Y` ON `X`.`K` = `Y`.`K`]]>
</Resource>
</TestCase>
+ <TestCase name="testInsert">
+ <Resource name="formatted">
+ <![CDATA[INSERT INTO `T1`
+SELECT *
+ FROM `T2`]]>
+ </Resource>
+ </TestCase>
<TestCase name="testJoinClauseToString">
<Resource name="formatted">
<![CDATA[SELECT `T`.`REGION_NAME`, `T0`.`O_TOTALPRICE`