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 <jiefe...@126.com>
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`

Reply via email to