This is an automated email from the ASF dual-hosted git repository. ibzib 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 d3a4d52 [BEAM-12219] Enable SUBSTRING function. new bdee3bd Merge pull request #14630 from ibzib/BEAM-12219 d3a4d52 is described below commit d3a4d52676d50ae89499050b25698653d8800f39 Author: Kyle Weaver <kcwea...@google.com> AuthorDate: Fri Apr 23 14:51:15 2021 -0700 [BEAM-12219] Enable SUBSTRING function. This function is gated behind language feature FEATURE_V_1_3_ADDITIONAL_STRING_FUNCTIONS, so I added that (and also alphabetized the list). --- .../beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java | 11 ++++++----- .../sql/zetasql/translation/SqlOperatorMappingTable.java | 1 + .../extensions/sql/zetasql/ZetaSqlDialectSpecTest.java | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 5 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 14a6574..d6ac756 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 @@ -144,14 +144,15 @@ public class SqlAnalyzer { .setEnabledLanguageFeatures( new HashSet<>( Arrays.asList( - LanguageFeature.FEATURE_NUMERIC_TYPE, + LanguageFeature.FEATURE_CREATE_AGGREGATE_FUNCTION, + LanguageFeature.FEATURE_CREATE_TABLE_FUNCTION, LanguageFeature.FEATURE_DISALLOW_GROUP_BY_FLOAT, - LanguageFeature.FEATURE_V_1_2_CIVIL_TIME, - LanguageFeature.FEATURE_V_1_1_SELECT_STAR_EXCEPT_REPLACE, + LanguageFeature.FEATURE_NUMERIC_TYPE, LanguageFeature.FEATURE_TABLE_VALUED_FUNCTIONS, - LanguageFeature.FEATURE_CREATE_TABLE_FUNCTION, LanguageFeature.FEATURE_TEMPLATE_FUNCTIONS, - LanguageFeature.FEATURE_CREATE_AGGREGATE_FUNCTION))); + LanguageFeature.FEATURE_V_1_1_SELECT_STAR_EXCEPT_REPLACE, + LanguageFeature.FEATURE_V_1_2_CIVIL_TIME, + LanguageFeature.FEATURE_V_1_3_ADDITIONAL_STRING_FUNCTIONS))); options.getLanguageOptions().setSupportedStatementKinds(SUPPORTED_STATEMENT_KINDS); return options; diff --git a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorMappingTable.java b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorMappingTable.java index 23dfc77..6941033 100644 --- a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorMappingTable.java +++ b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/translation/SqlOperatorMappingTable.java @@ -57,6 +57,7 @@ class SqlOperatorMappingTable { .put("$divide", SqlStdOperatorTable.DIVIDE) .put("concat", SqlOperators.CONCAT) .put("substr", SqlOperators.SUBSTR) + .put("substring", SqlOperators.SUBSTR) .put("trim", SqlOperators.TRIM) .put("replace", SqlOperators.REPLACE) .put("char_length", SqlOperators.CHAR_LENGTH) 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 2e5bd70..80725da 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 @@ -3516,6 +3516,22 @@ public class ZetaSqlDialectSpecTest extends ZetaSqlTestBase { } @Test + public void testSubstring() { + String sql = "SELECT substring(@p0, @p1, @p2)"; + ImmutableMap<String, Value> params = + ImmutableMap.of( + "p0", Value.createStringValue("abc"), + "p1", Value.createInt64Value(-2L), + "p2", Value.createInt64Value(1L)); + + PCollection<Row> stream = execute(sql, params); + + final Schema schema = Schema.builder().addStringField("field1").build(); + PAssert.that(stream).containsInAnyOrder(Row.withSchema(schema).addValues("b").build()); + pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES)); + } + + @Test public void testSubstrWithLargeValueExpectException() { String sql = "SELECT substr(@p0, @p1, @p2)"; ImmutableMap<String, Value> params =