This is an automated email from the ASF dual-hosted git repository.

mbudiu 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 7363897a7c [CALCITE-6977] Unparse DELETE SQL throws unsupported 
exception
7363897a7c is described below

commit 7363897a7c32161e501a1ba3fc717c304e470bf0
Author: wei.zhou <[email protected]>
AuthorDate: Tue Apr 22 18:35:42 2025 +0800

    [CALCITE-6977] Unparse DELETE SQL throws unsupported exception
---
 .../java/org/apache/calcite/sql/SqlDelete.java     | 15 +++++++++++++-
 .../apache/calcite/sql/parser/SqlParserTest.java   | 23 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/calcite/sql/SqlDelete.java 
b/core/src/main/java/org/apache/calcite/sql/SqlDelete.java
index 04eeeab35f..9bf937a7cd 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlDelete.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlDelete.java
@@ -32,7 +32,20 @@
  */
 public class SqlDelete extends SqlCall {
   public static final SqlSpecialOperator OPERATOR =
-      new SqlSpecialOperator("DELETE", SqlKind.DELETE);
+      new SqlSpecialOperator("DELETE", SqlKind.DELETE) {
+        @SuppressWarnings("argument.type.incompatible")
+        @Override public SqlCall createCall(
+            @Nullable SqlLiteral functionQualifier,
+            SqlParserPos pos,
+            @Nullable SqlNode... operands) {
+          return new SqlDelete(
+              pos,
+              operands[0],
+              operands[1],
+              (SqlSelect) operands[2],
+              (SqlIdentifier) operands[3]);
+        }
+      };
 
   SqlNode targetTable;
   @Nullable SqlNode condition;
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 0939a594fc..8ef2c7601e 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
@@ -17,6 +17,7 @@
 package org.apache.calcite.sql.parser;
 import org.apache.calcite.avatica.util.Quoting;
 import org.apache.calcite.sql.SqlCall;
+import org.apache.calcite.sql.SqlDelete;
 import org.apache.calcite.sql.SqlDialect;
 import org.apache.calcite.sql.SqlExplain;
 import org.apache.calcite.sql.SqlIdentifier;
@@ -32,6 +33,7 @@
 import org.apache.calcite.sql.SqlWriterConfig;
 import org.apache.calcite.sql.dialect.AnsiSqlDialect;
 import org.apache.calcite.sql.dialect.SparkSqlDialect;
+import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.parser.SqlParser.Config;
 import org.apache.calcite.sql.pretty.SqlPrettyWriter;
 import org.apache.calcite.sql.test.SqlTestFactory;
@@ -9541,6 +9543,27 @@ private static Consumer<List<? extends Throwable>> 
checkWarnings(
         .fails(errorMessage2);
   }
 
+  /**
+   * Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6977";>[CALCITE-6977]
+   * Unparse DELETE SQL throws unsupported exception</a>.
+   */
+  @Test void testSqlDeleteSqlBasicCallToString() {
+    final SqlParserPos parserPos = SqlParserPos.ZERO;
+    final SqlIdentifier employees = new SqlIdentifier("employee", parserPos);
+    final SqlCall where =
+        SqlStdOperatorTable.EQUALS.createCall(parserPos,
+            new SqlIdentifier("id", parserPos),
+            SqlLiteral.createExactNumeric("1", parserPos));
+    SqlDelete sqlDelete = new SqlDelete(parserPos, employees, where, null, 
null);
+    // Create a new SqlDelete with the same operands as the original by 
SqlDelete.OPERATOR
+    final SqlCall call =
+        SqlDelete.OPERATOR.createCall(sqlDelete.getFunctionQuantifier(),
+            sqlDelete.getParserPosition(),
+            sqlDelete.getOperandList());
+    assertThat(call, hasToString(sqlDelete.toString()));
+  }
+
   protected static String varToStr(Hoist.Variable v) {
     if (v.node instanceof SqlLiteral) {
       SqlLiteral literal = (SqlLiteral) v.node;

Reply via email to