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 "