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

robinyqiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 56048f2  Move Java function implementations to a sub-module (#12247)
56048f2 is described below

commit 56048f2a1e5ebd126982f07bf4ad8f3ab68a88e3
Author: Yueyang Qiu <[email protected]>
AuthorDate: Thu Jul 16 17:44:24 2020 -0700

    Move Java function implementations to a sub-module (#12247)
---
 .../sdk/extensions/sql/zetasql/SqlAnalyzer.java    |   3 +-
 ....java => SupportedZetaSqlBuiltinFunctions.java} | 106 ++-------------------
 .../sdk/extensions/sql/zetasql/ZetaSqlIdUtils.java |  84 ----------------
 .../translation/AggregateScanConverter.java        |   1 -
 .../zetasql/translation/ExpressionConverter.java   |   8 +-
 .../SqlCaseWithValueOperatorRewriter.java          |   4 +-
 .../SqlCoalesceOperatorRewriter.java               |   4 +-
 .../SqlIfNullOperatorRewriter.java                 |   4 +-
 .../SqlNullIfOperatorRewriter.java                 |   4 +-
 .../{ => translation}/SqlOperatorRewriter.java     |   4 +-
 .../zetasql/{ => translation}/SqlOperators.java    |  14 ++-
 .../translation/SqlStdOperatorMappingTable.java    | 104 ++++++++++++++++++++
 .../{ => translation}/SqlWindowTableFunction.java  |   4 +-
 .../{ => translation/impl}/BeamBuiltinMethods.java |   2 +-
 .../{ => translation/impl}/DateFunctions.java      |   3 +-
 .../{ => translation/impl}/StringFunctions.java    |   2 +-
 .../{ => translation/impl}/TimestampFunctions.java |   3 +-
 .../impl/package-info.java}                        |  27 ++----
 .../sql/zetasql/ZetaSqlDialectSpecTest.java        |   2 +-
 .../sql/zetasql/ZetaSqlTimeFunctionsTest.java      |   1 -
 20 files changed, 154 insertions(+), 230 deletions(-)

diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java
index 10af43d..fd7093a 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java
@@ -21,7 +21,6 @@ import static 
com.google.zetasql.ZetaSQLResolvedNodeKind.ResolvedNodeKind.RESOLV
 import static 
com.google.zetasql.ZetaSQLResolvedNodeKind.ResolvedNodeKind.RESOLVED_CREATE_TABLE_FUNCTION_STMT;
 import static 
com.google.zetasql.ZetaSQLResolvedNodeKind.ResolvedNodeKind.RESOLVED_QUERY_STMT;
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static 
org.apache.beam.sdk.extensions.sql.zetasql.SqlStdOperatorMappingTable.ZETASQL_BUILTIN_FUNCTION_ALLOWLIST;
 import static 
org.apache.beam.sdk.extensions.sql.zetasql.ZetaSqlCalciteTranslationUtils.toZetaType;
 
 import com.google.common.collect.ImmutableList;
@@ -226,7 +225,7 @@ public class SqlAnalyzer {
     ZetaSQLBuiltinFunctionOptions zetasqlBuiltinFunctionOptions =
         new ZetaSQLBuiltinFunctionOptions(options.getLanguageOptions());
 
-    ZETASQL_BUILTIN_FUNCTION_ALLOWLIST.forEach(
+    SupportedZetaSqlBuiltinFunctions.ALLOWLIST.forEach(
         zetasqlBuiltinFunctionOptions::includeFunctionSignatureId);
 
     catalog.addZetaSQLFunctions(zetasqlBuiltinFunctionOptions);
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SupportedZetaSqlBuiltinFunctions.java
similarity index 88%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SupportedZetaSqlBuiltinFunctions.java
index f64eccc..2ccbb1b 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlStdOperatorMappingTable.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SupportedZetaSqlBuiltinFunctions.java
@@ -19,25 +19,17 @@ package org.apache.beam.sdk.extensions.sql.zetasql;
 
 import com.google.zetasql.ZetaSQLFunction.FunctionSignatureId;
 import java.util.List;
-import java.util.Map;
-import org.apache.beam.sdk.annotations.Internal;
-import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.SqlOperator;
-import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableList;
-import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap;
-
-/** SqlStdOperatorMappingTable. */
-@Internal
-public class SqlStdOperatorMappingTable {
-
-  /**
-   * Keep this list in sync with
-   * 
https://github.com/google/zetasql/blob/master/zetasql/public/builtin_function.proto.
 Uncomment
-   * the corresponding entries to enable parser support to the 
operators/functions.
-   *
-   * <p>Last synced ZetaSQL release: 2020.06.01
-   */
-  static final List<FunctionSignatureId> ZETASQL_BUILTIN_FUNCTION_ALLOWLIST =
+
+/**
+ * List of ZetaSQL builtin functions supported by Beam ZetaSQL. Keep this list 
in sync with
+ * 
https://github.com/google/zetasql/blob/master/zetasql/public/builtin_function.proto.
 Uncomment
+ * the corresponding entries to enable parser support to the 
operators/functions.
+ *
+ * <p>Last synced ZetaSQL release: 2020.06.01
+ */
+class SupportedZetaSqlBuiltinFunctions {
+  static final List<FunctionSignatureId> ALLOWLIST =
       ImmutableList.of(
           FunctionSignatureId.FN_ADD_DOUBLE, // $add
           FunctionSignatureId.FN_ADD_INT64, // $add
@@ -623,82 +615,4 @@ public class SqlStdOperatorMappingTable {
           // FunctionSignatureId.FN_SAFE_ARRAY_AT_OFFSET, // 
$safe_array_at_offset
           // FunctionSignatureId.FN_SAFE_ARRAY_AT_ORDINAL, // 
$safe_array_at_ordinal
           );
-
-  // todo: Some of operators defined here are later overridden in 
ZetaSQLPlannerImpl.
-  // We should remove them from this table and add generic way to provide 
custom
-  // implementation. (Ex.: timestamp_add)
-  public static final Map<String, SqlOperator> 
ZETASQL_FUNCTION_TO_CALCITE_SQL_OPERATOR =
-      ImmutableMap.<String, SqlOperator>builder()
-          // grouped window function
-          .put("TUMBLE", SqlStdOperatorTable.TUMBLE)
-          .put("HOP", SqlStdOperatorTable.HOP)
-          .put("SESSION", SqlStdOperatorTable.SESSION)
-
-          // ZetaSQL functions
-          .put("$and", SqlStdOperatorTable.AND)
-          .put("$or", SqlStdOperatorTable.OR)
-          .put("$not", SqlStdOperatorTable.NOT)
-          .put("$equal", SqlStdOperatorTable.EQUALS)
-          .put("$not_equal", SqlStdOperatorTable.NOT_EQUALS)
-          .put("$greater", SqlStdOperatorTable.GREATER_THAN)
-          .put("$greater_or_equal", SqlStdOperatorTable.GREATER_THAN_OR_EQUAL)
-          .put("$less", SqlStdOperatorTable.LESS_THAN)
-          .put("$less_or_equal", SqlStdOperatorTable.LESS_THAN_OR_EQUAL)
-          .put("$like", SqlOperators.LIKE)
-          .put("$is_null", SqlStdOperatorTable.IS_NULL)
-          .put("$is_true", SqlStdOperatorTable.IS_TRUE)
-          .put("$is_false", SqlStdOperatorTable.IS_FALSE)
-          .put("$add", SqlStdOperatorTable.PLUS)
-          .put("$subtract", SqlStdOperatorTable.MINUS)
-          .put("$multiply", SqlStdOperatorTable.MULTIPLY)
-          .put("$unary_minus", SqlStdOperatorTable.UNARY_MINUS)
-          .put("$divide", SqlStdOperatorTable.DIVIDE)
-          .put("concat", SqlOperators.CONCAT)
-          .put("substr", SqlOperators.SUBSTR)
-          .put("trim", SqlOperators.TRIM)
-          .put("replace", SqlOperators.REPLACE)
-          .put("char_length", SqlOperators.CHAR_LENGTH)
-          .put("starts_with", SqlOperators.START_WITHS)
-          .put("ends_with", SqlOperators.ENDS_WITH)
-          .put("ltrim", SqlOperators.LTRIM)
-          .put("rtrim", SqlOperators.RTRIM)
-          .put("reverse", SqlOperators.REVERSE)
-          .put("$count_star", SqlStdOperatorTable.COUNT)
-          .put("max", SqlStdOperatorTable.MAX)
-          .put("min", SqlStdOperatorTable.MIN)
-          .put("avg", SqlStdOperatorTable.AVG)
-          .put("sum", SqlStdOperatorTable.SUM)
-          .put("any_value", SqlStdOperatorTable.ANY_VALUE)
-          .put("count", SqlStdOperatorTable.COUNT)
-          // .put("bit_and", SqlStdOperatorTable.BIT_AND) //JIRA link:
-          // https://issues.apache.org/jira/browse/BEAM-10379
-          .put("string_agg", SqlOperators.STRING_AGG_STRING_FN) // NULL values 
not supported
-          .put("bit_or", SqlStdOperatorTable.BIT_OR)
-          .put("ceil", SqlStdOperatorTable.CEIL)
-          .put("floor", SqlStdOperatorTable.FLOOR)
-          .put("mod", SqlStdOperatorTable.MOD)
-          .put("timestamp", SqlOperators.TIMESTAMP_OP)
-          .put("$case_no_value", SqlStdOperatorTable.CASE)
-
-          // if operator - IF(cond, pos, neg) can actually be mapped directly 
to `CASE WHEN cond
-          // THEN pos ELSE neg`
-          .put("if", SqlStdOperatorTable.CASE)
-
-          // $case_no_value specializations
-          // all of these operators can have their operands adjusted to 
achieve the same thing with
-          // a call to $case_with_value
-          .put("$case_with_value", SqlStdOperatorTable.CASE)
-          .put("coalesce", SqlStdOperatorTable.CASE)
-          .put("ifnull", SqlStdOperatorTable.CASE)
-          .put("nullif", SqlStdOperatorTable.CASE)
-          .build();
-
-  public static final Map<String, SqlOperatorRewriter>
-      ZETASQL_FUNCTION_TO_CALCITE_SQL_OPERATOR_REWRITER =
-          ImmutableMap.<String, SqlOperatorRewriter>builder()
-              .put("$case_with_value", new SqlCaseWithValueOperatorRewriter())
-              .put("coalesce", new SqlCoalesceOperatorRewriter())
-              .put("ifnull", new SqlIfNullOperatorRewriter())
-              .put("nullif", new SqlNullIfOperatorRewriter())
-              .build();
 }
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlIdUtils.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlIdUtils.java
deleted file mode 100644
index 8529241..0000000
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlIdUtils.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.beam.sdk.extensions.sql.zetasql;
-
-import static java.util.stream.Collectors.joining;
-
-import java.util.List;
-import java.util.regex.Pattern;
-import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap;
-
-/** Utils to work with ZetaSQL-compatible IDs. */
-class ZetaSqlIdUtils {
-
-  /**
-   * Some special characters we explcitily handle.
-   *
-   * <p>Everything else is ignored, e.g. tabs, newlines, etc.
-   */
-  private static final Pattern SPECIAL_CHARS_ESCAPE =
-      Pattern.compile(
-          "(?<SpecialChar>["
-              + "\\\\" // slash
-              + "`" //    backtick
-              + "'" //    single quote
-              + "\"" //   double quote
-              + "?" //    question mark
-              + "])");
-
-  private static final ImmutableMap<String, String> WHITESPACES =
-      ImmutableMap.of(
-          "\n", "\\\\n",
-          "\t", "\\\\t",
-          "\r", "\\\\r",
-          "\f", "\\\\f");
-
-  private static final Pattern SIMPLE_ID = 
Pattern.compile("[A-Za-z_][A-Za-z_0-9]*");
-
-  /**
-   * Joins parts into a single compound ZetaSQL identifier.
-   *
-   * <p>Escapes backticks, slashes, double and single quotes, doesn't handle 
other special
-   * characters for now.
-   */
-  static String escapeAndJoin(List<String> parts) {
-    String escaped =
-        parts.stream()
-            .map(ZetaSqlIdUtils::escapeSpecialChars)
-            .map(ZetaSqlIdUtils::replaceWhitespaces)
-            .map(ZetaSqlIdUtils::backtickIfNeeded)
-            .collect(joining("."));
-    return escaped;
-  }
-
-  private static String escapeSpecialChars(String str) {
-    return SPECIAL_CHARS_ESCAPE.matcher(str).replaceAll("\\\\${SpecialChar}");
-  }
-
-  private static String replaceWhitespaces(String s) {
-    String result = s;
-    for (String whitespace : WHITESPACES.keySet()) {
-      result = result.replaceAll(whitespace, WHITESPACES.get(whitespace));
-    }
-    return result;
-  }
-
-  private static String backtickIfNeeded(String s) {
-    return SIMPLE_ID.matcher(s).matches() ? s : ("`" + s + "`");
-  }
-}
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/AggregateScanConverter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/AggregateScanConverter.java
index ec97ed4..a573da3 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/AggregateScanConverter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/AggregateScanConverter.java
@@ -34,7 +34,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import org.apache.beam.sdk.extensions.sql.zetasql.SqlStdOperatorMappingTable;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rel.RelCollations;
 import org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rel.RelNode;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rel.core.AggregateCall;
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/ExpressionConverter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/ExpressionConverter.java
index 0758a24..e9d25b2 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/ExpressionConverter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/ExpressionConverter.java
@@ -77,10 +77,6 @@ import 
org.apache.beam.sdk.extensions.sql.impl.SqlConversionException;
 import 
org.apache.beam.sdk.extensions.sql.impl.ZetaSqlUserDefinedSQLNativeTableValuedFunction;
 import org.apache.beam.sdk.extensions.sql.impl.utils.TVFStreamingUtils;
 import 
org.apache.beam.sdk.extensions.sql.meta.provider.bigquery.BeamBigQuerySqlDialect;
-import org.apache.beam.sdk.extensions.sql.zetasql.SqlOperatorRewriter;
-import org.apache.beam.sdk.extensions.sql.zetasql.SqlOperators;
-import org.apache.beam.sdk.extensions.sql.zetasql.SqlStdOperatorMappingTable;
-import org.apache.beam.sdk.extensions.sql.zetasql.SqlWindowTableFunction;
 import 
org.apache.beam.sdk.extensions.sql.zetasql.ZetaSqlCalciteTranslationUtils;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.avatica.util.ByteString;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.avatica.util.TimeUnit;
@@ -817,7 +813,7 @@ public class ExpressionConverter {
         ret =
             rexBuilder()
                 .makeCall(
-                    SqlOperators.createSimpleSqlFunction(
+                    SqlOperators.createOtherKindSqlFunction(
                         BeamBigQuerySqlDialect.NUMERIC_LITERAL_FUNCTION,
                         
ZetaSqlCalciteTranslationUtils.toCalciteTypeName(kind)),
                     ImmutableList.of(
@@ -1000,7 +996,7 @@ public class ExpressionConverter {
         Type returnType = 
functionCall.getSignature().getResultType().getType();
         if (returnType != null) {
           op =
-              SqlOperators.createSimpleSqlFunction(
+              SqlOperators.createOtherKindSqlFunction(
                   funName, 
ZetaSqlCalciteTranslationUtils.toCalciteTypeName(returnType.getKind()));
         } else {
           throw new UnsupportedOperationException("Does not support ZetaSQL 
function: " + funName);
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCaseWithValueOperatorRewriter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCaseWithValueOperatorRewriter.java
similarity index 95%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCaseWithValueOperatorRewriter.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCaseWithValueOperatorRewriter.java
index 79d99b0..c481750 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCaseWithValueOperatorRewriter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCaseWithValueOperatorRewriter.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -49,7 +49,7 @@ import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Iterable
  * <p>Note that the ELSE statement is actually optional, but we don't need to 
worry about that here
  * because the ZetaSQL analyzer populates the ELSE argument as a NULL literal 
if it's not specified.
  */
-public class SqlCaseWithValueOperatorRewriter implements SqlOperatorRewriter {
+class SqlCaseWithValueOperatorRewriter implements SqlOperatorRewriter {
   @Override
   public RexNode apply(RexBuilder rexBuilder, List<RexNode> operands) {
     Preconditions.checkArgument(
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCoalesceOperatorRewriter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCoalesceOperatorRewriter.java
similarity index 95%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCoalesceOperatorRewriter.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCoalesceOperatorRewriter.java
index 58743f6..e804433 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlCoalesceOperatorRewriter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlCoalesceOperatorRewriter.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -41,7 +41,7 @@ import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
  * <p>There is also a special case for the single-argument case: 
<code>COALESCE(a)</code> becomes
  * just <code>a</code>.
  */
-public class SqlCoalesceOperatorRewriter implements SqlOperatorRewriter {
+class SqlCoalesceOperatorRewriter implements SqlOperatorRewriter {
   @Override
   public RexNode apply(RexBuilder rexBuilder, List<RexNode> operands) {
     Preconditions.checkArgument(
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlIfNullOperatorRewriter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlIfNullOperatorRewriter.java
similarity index 94%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlIfNullOperatorRewriter.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlIfNullOperatorRewriter.java
index 039797d..4c7db12 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlIfNullOperatorRewriter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlIfNullOperatorRewriter.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.List;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rex.RexBuilder;
@@ -33,7 +33,7 @@ import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
  *   ELSE expr
  *   END</pre></code>
  */
-public class SqlIfNullOperatorRewriter implements SqlOperatorRewriter {
+class SqlIfNullOperatorRewriter implements SqlOperatorRewriter {
   @Override
   public RexNode apply(RexBuilder rexBuilder, List<RexNode> operands) {
     Preconditions.checkArgument(
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlNullIfOperatorRewriter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlNullIfOperatorRewriter.java
similarity index 94%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlNullIfOperatorRewriter.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlNullIfOperatorRewriter.java
index 382a5ca..03ea82e 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlNullIfOperatorRewriter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlNullIfOperatorRewriter.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.List;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rex.RexBuilder;
@@ -33,7 +33,7 @@ import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
  *   ELSE expression
  *   END</pre></code>
  */
-public class SqlNullIfOperatorRewriter implements SqlOperatorRewriter {
+class SqlNullIfOperatorRewriter implements SqlOperatorRewriter {
   @Override
   public RexNode apply(RexBuilder rexBuilder, List<RexNode> operands) {
     Preconditions.checkArgument(
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperatorRewriter.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorRewriter.java
similarity index 93%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperatorRewriter.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorRewriter.java
index 949632c..ae31ffa 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperatorRewriter.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorRewriter.java
@@ -15,14 +15,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.List;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rex.RexBuilder;
 import org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rex.RexNode;
 
 /** Interface for rewriting calls a specific ZetaSQL operator. */
-public interface SqlOperatorRewriter {
+interface SqlOperatorRewriter {
   /**
    * Create and return a new {@link RexNode} that represents a call to this 
operator with the
    * specified operands.
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperators.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperators.java
similarity index 94%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperators.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperators.java
index c9da966..0730eba 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlOperators.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperators.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -24,6 +24,8 @@ import 
org.apache.beam.sdk.extensions.sql.impl.ScalarFunctionImpl;
 import org.apache.beam.sdk.extensions.sql.impl.UdafImpl;
 import org.apache.beam.sdk.extensions.sql.impl.planner.BeamRelDataTypeSystem;
 import org.apache.beam.sdk.extensions.sql.impl.udaf.StringAgg;
+import org.apache.beam.sdk.extensions.sql.zetasql.DateTimeUtils;
+import 
org.apache.beam.sdk.extensions.sql.zetasql.translation.impl.BeamBuiltinMethods;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.jdbc.JavaTypeFactoryImpl;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rel.type.RelDataType;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.rel.type.RelDataTypeFactory;
@@ -57,7 +59,7 @@ import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Lists;
  * A separate SqlOperators table for those functions that do not exist or not 
compatible with
  * Calcite. Most of functions within this class is copied from Calcite.
  */
-public class SqlOperators {
+class SqlOperators {
   public static final RelDataType TIMESTAMP_WITH_NULLABILITY =
       createSqlType(SqlTypeName.TIMESTAMP, true);
   public static final RelDataType OTHER = createSqlType(SqlTypeName.OTHER, 
false);
@@ -65,7 +67,7 @@ public class SqlOperators {
   public static final RelDataType BIGINT = createSqlType(SqlTypeName.BIGINT, 
false);
 
   public static final SqlOperator TIMESTAMP_ADD_FN =
-      createSimpleSqlFunction("timestamp_add", SqlTypeName.TIMESTAMP);
+      createOtherKindSqlFunction("timestamp_add", SqlTypeName.TIMESTAMP);
 
   public static final SqlOperator STRING_AGG_STRING_FN =
       createUdafOperator(
@@ -73,7 +75,11 @@ public class SqlOperators {
           x -> createTypeFactory().createSqlType(SqlTypeName.VARCHAR),
           new UdafImpl<>(new StringAgg.StringAggString()));
 
-  public static SqlFunction createSimpleSqlFunction(String name, SqlTypeName 
returnType) {
+  /**
+   * Create a dummy SqlFunction of type OTHER_FUNCTION from given function 
name and return type.
+   * These functions will be unparsed in BeamZetaSqlCalcRel and then executed 
by ZetaSQL evaluator.
+   */
+  public static SqlFunction createOtherKindSqlFunction(String name, 
SqlTypeName returnType) {
     return new SqlFunction(
         name,
         SqlKind.OTHER_FUNCTION,
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlStdOperatorMappingTable.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlStdOperatorMappingTable.java
new file mode 100644
index 0000000..fd9745d
--- /dev/null
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlStdOperatorMappingTable.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
+
+import java.util.Map;
+import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.SqlOperator;
+import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import 
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableMap;
+
+/** SqlStdOperatorMappingTable. */
+class SqlStdOperatorMappingTable {
+
+  // todo: Some of operators defined here are later overridden in 
ZetaSQLPlannerImpl.
+  // We should remove them from this table and add generic way to provide 
custom
+  // implementation. (Ex.: timestamp_add)
+  static final Map<String, SqlOperator> 
ZETASQL_FUNCTION_TO_CALCITE_SQL_OPERATOR =
+      ImmutableMap.<String, SqlOperator>builder()
+          // grouped window function
+          .put("TUMBLE", SqlStdOperatorTable.TUMBLE)
+          .put("HOP", SqlStdOperatorTable.HOP)
+          .put("SESSION", SqlStdOperatorTable.SESSION)
+
+          // ZetaSQL functions
+          .put("$and", SqlStdOperatorTable.AND)
+          .put("$or", SqlStdOperatorTable.OR)
+          .put("$not", SqlStdOperatorTable.NOT)
+          .put("$equal", SqlStdOperatorTable.EQUALS)
+          .put("$not_equal", SqlStdOperatorTable.NOT_EQUALS)
+          .put("$greater", SqlStdOperatorTable.GREATER_THAN)
+          .put("$greater_or_equal", SqlStdOperatorTable.GREATER_THAN_OR_EQUAL)
+          .put("$less", SqlStdOperatorTable.LESS_THAN)
+          .put("$less_or_equal", SqlStdOperatorTable.LESS_THAN_OR_EQUAL)
+          .put("$like", SqlOperators.LIKE)
+          .put("$is_null", SqlStdOperatorTable.IS_NULL)
+          .put("$is_true", SqlStdOperatorTable.IS_TRUE)
+          .put("$is_false", SqlStdOperatorTable.IS_FALSE)
+          .put("$add", SqlStdOperatorTable.PLUS)
+          .put("$subtract", SqlStdOperatorTable.MINUS)
+          .put("$multiply", SqlStdOperatorTable.MULTIPLY)
+          .put("$unary_minus", SqlStdOperatorTable.UNARY_MINUS)
+          .put("$divide", SqlStdOperatorTable.DIVIDE)
+          .put("concat", SqlOperators.CONCAT)
+          .put("substr", SqlOperators.SUBSTR)
+          .put("trim", SqlOperators.TRIM)
+          .put("replace", SqlOperators.REPLACE)
+          .put("char_length", SqlOperators.CHAR_LENGTH)
+          .put("starts_with", SqlOperators.START_WITHS)
+          .put("ends_with", SqlOperators.ENDS_WITH)
+          .put("ltrim", SqlOperators.LTRIM)
+          .put("rtrim", SqlOperators.RTRIM)
+          .put("reverse", SqlOperators.REVERSE)
+          .put("$count_star", SqlStdOperatorTable.COUNT)
+          .put("max", SqlStdOperatorTable.MAX)
+          .put("min", SqlStdOperatorTable.MIN)
+          .put("avg", SqlStdOperatorTable.AVG)
+          .put("sum", SqlStdOperatorTable.SUM)
+          .put("any_value", SqlStdOperatorTable.ANY_VALUE)
+          .put("count", SqlStdOperatorTable.COUNT)
+          // .put("bit_and", SqlStdOperatorTable.BIT_AND) //JIRA link:
+          // https://issues.apache.org/jira/browse/BEAM-10379
+          .put("string_agg", SqlOperators.STRING_AGG_STRING_FN) // NULL values 
not supported
+          .put("bit_or", SqlStdOperatorTable.BIT_OR)
+          .put("ceil", SqlStdOperatorTable.CEIL)
+          .put("floor", SqlStdOperatorTable.FLOOR)
+          .put("mod", SqlStdOperatorTable.MOD)
+          .put("timestamp", SqlOperators.TIMESTAMP_OP)
+          .put("$case_no_value", SqlStdOperatorTable.CASE)
+
+          // if operator - IF(cond, pos, neg) can actually be mapped directly 
to `CASE WHEN cond
+          // THEN pos ELSE neg`
+          .put("if", SqlStdOperatorTable.CASE)
+
+          // $case_no_value specializations
+          // all of these operators can have their operands adjusted to 
achieve the same thing with
+          // a call to $case_with_value
+          .put("$case_with_value", SqlStdOperatorTable.CASE)
+          .put("coalesce", SqlStdOperatorTable.CASE)
+          .put("ifnull", SqlStdOperatorTable.CASE)
+          .put("nullif", SqlStdOperatorTable.CASE)
+          .build();
+
+  static final Map<String, SqlOperatorRewriter> 
ZETASQL_FUNCTION_TO_CALCITE_SQL_OPERATOR_REWRITER =
+      ImmutableMap.<String, SqlOperatorRewriter>builder()
+          .put("$case_with_value", new SqlCaseWithValueOperatorRewriter())
+          .put("coalesce", new SqlCoalesceOperatorRewriter())
+          .put("ifnull", new SqlIfNullOperatorRewriter())
+          .put("nullif", new SqlNullIfOperatorRewriter())
+          .build();
+}
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlWindowTableFunction.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlWindowTableFunction.java
similarity index 97%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlWindowTableFunction.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlWindowTableFunction.java
index c04a265..1b8817b 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlWindowTableFunction.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlWindowTableFunction.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,7 +36,7 @@ import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.type.SqlTyp
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.sql.validate.SqlValidator;
 
 /** Base class for table-valued function windowing operator (TUMBLE, HOP and 
SESSION). */
-public class SqlWindowTableFunction extends SqlFunction {
+class SqlWindowTableFunction extends SqlFunction {
   public SqlWindowTableFunction(String name) {
     super(
         name,
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/BeamBuiltinMethods.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/BeamBuiltinMethods.java
similarity index 97%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/BeamBuiltinMethods.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/BeamBuiltinMethods.java
index 9f6b33b..b15cac3 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/BeamBuiltinMethods.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/BeamBuiltinMethods.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation.impl;
 
 import java.lang.reflect.Method;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.linq4j.tree.Types;
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/DateFunctions.java
similarity index 91%
copy from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
copy to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/DateFunctions.java
index c75d033..16848ef 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/DateFunctions.java
@@ -15,9 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation.impl;
 
 import java.util.TimeZone;
+import org.apache.beam.sdk.extensions.sql.zetasql.DateTimeUtils;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/StringFunctions.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/StringFunctions.java
similarity index 98%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/StringFunctions.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/StringFunctions.java
index d10dc30..cb5955a 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/StringFunctions.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/StringFunctions.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation.impl;
 
 import java.util.regex.Pattern;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.linq4j.function.Strict;
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/TimestampFunctions.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/TimestampFunctions.java
similarity index 93%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/TimestampFunctions.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/TimestampFunctions.java
index 9bbbb9b..b931208 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/TimestampFunctions.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/TimestampFunctions.java
@@ -15,9 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
+package org.apache.beam.sdk.extensions.sql.zetasql.translation.impl;
 
 import java.util.TimeZone;
+import org.apache.beam.sdk.extensions.sql.zetasql.DateTimeUtils;
 import 
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.linq4j.function.Strict;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
diff --git 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/package-info.java
similarity index 57%
rename from 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
rename to 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/package-info.java
index c75d033..6c80299 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/DateFunctions.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/impl/package-info.java
@@ -15,24 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.beam.sdk.extensions.sql.zetasql;
 
-import java.util.TimeZone;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-
-/** DateFunctions. */
-public class DateFunctions {
-  public DateTime date(Integer year, Integer month, Integer day) {
-    return DateTimeUtils.parseDate(
-        String.join("-", year.toString(), month.toString(), day.toString()));
-  }
-
-  public DateTime date(DateTime ts) {
-    return date(ts, "UTC");
-  }
+/**
+ * Java implementation of ZetaSQL functions.
+ *
+ * <p>Used only by {@link 
org.apache.beam.sdk.extensions.sql.impl.rel.BeamCalcRel}.
+ */
+@Experimental
+package org.apache.beam.sdk.extensions.sql.zetasql.translation.impl;
 
-  public DateTime date(DateTime ts, String timezone) {
-    return 
ts.withZoneRetainFields(DateTimeZone.forTimeZone(TimeZone.getTimeZone(timezone)));
-  }
-}
+import org.apache.beam.sdk.annotations.Experimental;
diff --git 
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlDialectSpecTest.java
 
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlDialectSpecTest.java
index 5cddc2c..b70be26 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlDialectSpecTest.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlDialectSpecTest.java
@@ -720,7 +720,7 @@ public class ZetaSqlDialectSpecTest extends ZetaSqlTestBase 
{
 
   @Test
   public void testLike1() {
-    String sql = "SELECT @p0 LIKE  @p1 AS ColA";
+    String sql = "SELECT @p0 LIKE @p1 AS ColA";
     ImmutableMap<String, Value> params =
         ImmutableMap.of(
             "p0", Value.createStringValue("ab%"), "p1", 
Value.createStringValue("ab\\%"));
diff --git 
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlTimeFunctionsTest.java
 
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlTimeFunctionsTest.java
index 8b6d4e2..6789d63 100644
--- 
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlTimeFunctionsTest.java
+++ 
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlTimeFunctionsTest.java
@@ -247,7 +247,6 @@ public class ZetaSqlTimeFunctionsTest extends 
ZetaSqlTestBase {
   }
 
   @Test
-  @Ignore("[BEAM-9182] NULL parameters do not work in BeamZetaSqlCalcRel")
   public void testDateAddWithParameter() {
     String sql =
         "SELECT "

Reply via email to