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;