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);
     }
   }
 }

Reply via email to