This is an automated email from the ASF dual-hosted git repository.
xiong 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 4def07066b [CALCITE-6416] Remove unnecessary SUBSTRING rewrite in
SparkSqlDialect
4def07066b is described below
commit 4def07066b6cb370e37739985b19f6e6b408addb
Author: Xiong Duan <[email protected]>
AuthorDate: Thu May 23 14:12:24 2024 +0800
[CALCITE-6416] Remove unnecessary SUBSTRING rewrite in SparkSqlDialect
---
.../calcite/sql/dialect/SparkSqlDialect.java | 85 +++++++++-------------
1 file changed, 36 insertions(+), 49 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
index f1f67fa35b..a26fd804ca 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/SparkSqlDialect.java
@@ -19,11 +19,8 @@ package org.apache.calcite.sql.dialect;
import org.apache.calcite.avatica.util.TimeUnitRange;
import org.apache.calcite.config.NullCollation;
import org.apache.calcite.sql.JoinType;
-import org.apache.calcite.sql.SqlBasicFunction;
import org.apache.calcite.sql.SqlCall;
import org.apache.calcite.sql.SqlDialect;
-import org.apache.calcite.sql.SqlFunction;
-import org.apache.calcite.sql.SqlFunctionCategory;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
@@ -31,8 +28,6 @@ import org.apache.calcite.sql.SqlUtil;
import org.apache.calcite.sql.SqlWriter;
import org.apache.calcite.sql.fun.SqlFloorFunction;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
-import org.apache.calcite.sql.type.OperandTypes;
-import org.apache.calcite.sql.type.ReturnTypes;
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -48,10 +43,6 @@ public class SparkSqlDialect extends SqlDialect {
public static final SqlDialect DEFAULT = new
SparkSqlDialect(DEFAULT_CONTEXT);
- private static final SqlFunction SPARKSQL_SUBSTRING =
- SqlBasicFunction.create("SUBSTRING", ReturnTypes.ARG0_NULLABLE_VARYING,
- OperandTypes.VARIADIC, SqlFunctionCategory.STRING);
-
/**
* Creates a SparkSqlDialect.
*/
@@ -115,48 +106,44 @@ public class SparkSqlDialect extends SqlDialect {
@Override public void unparseCall(SqlWriter writer, SqlCall call,
int leftPrec, int rightPrec) {
- if (call.getOperator() == SqlStdOperatorTable.SUBSTRING) {
- SqlUtil.unparseFunctionSyntax(SPARKSQL_SUBSTRING, writer, call, false);
- } else {
- switch (call.getKind()) {
- case ARRAY_VALUE_CONSTRUCTOR:
- case MAP_VALUE_CONSTRUCTOR:
- final String keyword =
- call.getKind() == SqlKind.ARRAY_VALUE_CONSTRUCTOR ? "array" :
"map";
-
- writer.keyword(keyword);
-
- final SqlWriter.Frame frame = writer.startList("(", ")");
- for (SqlNode operand : call.getOperandList()) {
- writer.sep(",");
- operand.unparse(writer, leftPrec, rightPrec);
- }
- writer.endList(frame);
- break;
-
- case FLOOR:
- if (call.operandCount() != 2) {
- super.unparseCall(writer, call, leftPrec, rightPrec);
- return;
- }
-
- final SqlLiteral timeUnitNode = call.operand(1);
- final TimeUnitRange timeUnit =
timeUnitNode.getValueAs(TimeUnitRange.class);
-
- SqlCall call2 =
- SqlFloorFunction.replaceTimeUnitOperand(call, timeUnit.name(),
- timeUnitNode.getParserPosition());
- SqlFloorFunction.unparseDatetimeFunction(writer, call2, "DATE_TRUNC",
false);
- break;
- case TRIM:
- unparseHiveTrim(writer, call, leftPrec, rightPrec);
- break;
- case POSITION:
- SqlUtil.unparseFunctionSyntax(SqlStdOperatorTable.POSITION, writer,
call, false);
- break;
- default:
+ switch (call.getKind()) {
+ case ARRAY_VALUE_CONSTRUCTOR:
+ case MAP_VALUE_CONSTRUCTOR:
+ final String keyword =
+ call.getKind() == SqlKind.ARRAY_VALUE_CONSTRUCTOR ? "array" : "map";
+
+ writer.keyword(keyword);
+
+ final SqlWriter.Frame frame = writer.startList("(", ")");
+ for (SqlNode operand : call.getOperandList()) {
+ writer.sep(",");
+ operand.unparse(writer, leftPrec, rightPrec);
+ }
+ writer.endList(frame);
+ break;
+
+ case FLOOR:
+ if (call.operandCount() != 2) {
super.unparseCall(writer, call, leftPrec, rightPrec);
+ return;
}
+
+ final SqlLiteral timeUnitNode = call.operand(1);
+ final TimeUnitRange timeUnit =
timeUnitNode.getValueAs(TimeUnitRange.class);
+
+ SqlCall call2 =
+ SqlFloorFunction.replaceTimeUnitOperand(call, timeUnit.name(),
+ timeUnitNode.getParserPosition());
+ SqlFloorFunction.unparseDatetimeFunction(writer, call2, "DATE_TRUNC",
false);
+ break;
+ case TRIM:
+ unparseHiveTrim(writer, call, leftPrec, rightPrec);
+ break;
+ case POSITION:
+ SqlUtil.unparseFunctionSyntax(SqlStdOperatorTable.POSITION, writer,
call, false);
+ break;
+ default:
+ super.unparseCall(writer, call, leftPrec, rightPrec);
}
}
}