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 27739f9 [BEAM-10925] Refactor ZetaSqlJavaUdfTypeTest.
new 0f955b4 Merge pull request #14462 from ibzib/java-udf-types
27739f9 is described below
commit 27739f959c86018f496841bfc047b8d9e721108e
Author: Kyle Weaver <[email protected]>
AuthorDate: Wed Apr 7 10:19:09 2021 -0700
[BEAM-10925] Refactor ZetaSqlJavaUdfTypeTest.
Remove unnecessary throws clause and register all UDFs up front.
---
.../sql/zetasql/ZetaSqlJavaUdfTypeTest.java | 277 ++++++++++-----------
1 file changed, 126 insertions(+), 151 deletions(-)
diff --git
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlJavaUdfTypeTest.java
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlJavaUdfTypeTest.java
index e45b832..d9a9ae4 100644
---
a/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlJavaUdfTypeTest.java
+++
b/sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlJavaUdfTypeTest.java
@@ -17,7 +17,6 @@
*/
package org.apache.beam.sdk.extensions.sql.zetasql;
-import java.lang.reflect.Method;
import org.apache.beam.sdk.extensions.sql.BeamSqlUdf;
import org.apache.beam.sdk.extensions.sql.impl.JdbcConnection;
import org.apache.beam.sdk.extensions.sql.impl.JdbcDriver;
@@ -32,6 +31,7 @@ import org.apache.beam.sdk.testing.PAssert;
import org.apache.beam.sdk.testing.TestPipeline;
import org.apache.beam.sdk.values.PCollection;
import org.apache.beam.sdk.values.Row;
+import
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.schema.SchemaPlus;
import
org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.tools.Frameworks;
import org.apache.beam.vendor.calcite.v1_20_0.org.apache.calcite.tools.RuleSet;
import
org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableList;
@@ -51,12 +51,6 @@ public class ZetaSqlJavaUdfTypeTest extends ZetaSqlTestBase {
@Rule public transient TestPipeline pipeline = TestPipeline.create();
@Rule public ExpectedException thrown = ExpectedException.none();
- private Method boolUdf;
- private Method longUdf;
- private Method stringUdf;
- private Method bytesUdf;
- private Method doubleUdf;
-
private static final TestBoundedTable table =
TestBoundedTable.of(
Schema.builder()
@@ -111,21 +105,39 @@ public class ZetaSqlJavaUdfTypeTest extends
ZetaSqlTestBase {
public void setUp() throws NoSuchMethodException {
initialize();
- // Add BeamJavaUdfCalcRule to planner to enable UDFs.
+ // Register test table.
+ JdbcConnection jdbcConnection =
+ JdbcDriver.connect(
+ new ReadOnlyTableProvider("table_provider",
ImmutableMap.of("table", table)),
+ PipelineOptionsFactory.create());
+
+ // Register UDFs.
+ SchemaPlus schema = jdbcConnection.getCurrentSchemaPlus();
+ schema.add(
+ "test_boolean",
+ ScalarFunctionImpl.create(BooleanIdentityFn.class.getMethod("eval",
Boolean.class)));
+ schema.add(
+ "test_int64",
+ ScalarFunctionImpl.create(Int64IdentityFn.class.getMethod("eval",
Long.class)));
+ schema.add(
+ "test_string",
+ ScalarFunctionImpl.create(StringIdentityFn.class.getMethod("eval",
String.class)));
+ schema.add(
+ "test_bytes",
+ ScalarFunctionImpl.create(BytesIdentityFn.class.getMethod("eval",
byte[].class)));
+ schema.add(
+ "test_float64",
+ ScalarFunctionImpl.create(DoubleIdentityFn.class.getMethod("eval",
Double.class)));
+
this.config =
Frameworks.newConfigBuilder(config)
+ .defaultSchema(schema)
+ // Add BeamJavaUdfCalcRule to planner to enable UDFs.
.ruleSets(
ZetaSQLQueryPlanner.getZetaSqlRuleSets(
ImmutableList.of(BeamJavaUdfCalcRule.INSTANCE))
.toArray(new RuleSet[0]))
.build();
-
- // Look up UDF methods.
- this.boolUdf = BooleanIdentityFn.class.getMethod("eval", Boolean.class);
- this.longUdf = Int64IdentityFn.class.getMethod("eval", Long.class);
- this.stringUdf = StringIdentityFn.class.getMethod("eval", String.class);
- this.bytesUdf = BytesIdentityFn.class.getMethod("eval", byte[].class);
- this.doubleUdf = DoubleIdentityFn.class.getMethod("eval", Double.class);
}
public static class BooleanIdentityFn implements BeamSqlUdf {
@@ -158,19 +170,7 @@ public class ZetaSqlJavaUdfTypeTest extends
ZetaSqlTestBase {
}
}
- private void runUdfTypeTest(String query, Object result, Schema.TypeName
typeName, Method udf)
- throws NoSuchMethodException {
- // Add UDF to Calcite schema.
- JdbcConnection jdbcConnection =
- JdbcDriver.connect(
- new ReadOnlyTableProvider("table_provider",
ImmutableMap.of("table", table)),
- PipelineOptionsFactory.create());
- jdbcConnection.getCurrentSchemaPlus().add("test",
ScalarFunctionImpl.create(udf));
- config =
- Frameworks.newConfigBuilder(config)
- .defaultSchema(jdbcConnection.getCurrentSchemaPlus())
- .build();
-
+ private void runUdfTypeTest(String query, Object result, Schema.TypeName
typeName) {
ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config);
BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(query);
PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline,
beamRelNode);
@@ -181,293 +181,268 @@ public class ZetaSqlJavaUdfTypeTest extends
ZetaSqlTestBase {
}
@Test
- public void testTrueLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(true);", true, Schema.TypeName.BOOLEAN,
boolUdf);
+ public void testTrueLiteral() {
+ runUdfTypeTest("SELECT test_boolean(true);", true,
Schema.TypeName.BOOLEAN);
}
@Test
- public void testTrueInput() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(boolean_true) FROM table;", true,
Schema.TypeName.BOOLEAN, boolUdf);
+ public void testTrueInput() {
+ runUdfTypeTest("SELECT test_boolean(boolean_true) FROM table;", true,
Schema.TypeName.BOOLEAN);
}
@Test
- public void testFalseLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(false);", false, Schema.TypeName.BOOLEAN,
boolUdf);
+ public void testFalseLiteral() {
+ runUdfTypeTest("SELECT test_boolean(false);", false,
Schema.TypeName.BOOLEAN);
}
@Test
- public void testFalseInput() throws NoSuchMethodException {
+ public void testFalseInput() {
runUdfTypeTest(
- "SELECT test(boolean_false) FROM table;", false,
Schema.TypeName.BOOLEAN, boolUdf);
+ "SELECT test_boolean(boolean_false) FROM table;", false,
Schema.TypeName.BOOLEAN);
}
@Test
- public void testZeroInt64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(0);", 0L, Schema.TypeName.INT64, longUdf);
+ public void testZeroInt64Literal() {
+ runUdfTypeTest("SELECT test_int64(0);", 0L, Schema.TypeName.INT64);
}
@Test
- public void testZeroInt64Input() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(int64_0) FROM table;", 0L,
Schema.TypeName.INT64, longUdf);
+ public void testZeroInt64Input() {
+ runUdfTypeTest("SELECT test_int64(int64_0) FROM table;", 0L,
Schema.TypeName.INT64);
}
@Test
- public void testPosInt64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(123);", 123L, Schema.TypeName.INT64, longUdf);
+ public void testPosInt64Literal() {
+ runUdfTypeTest("SELECT test_int64(123);", 123L, Schema.TypeName.INT64);
}
@Test
- public void testPosInt64Input() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(int64_pos) FROM table;", 123L,
Schema.TypeName.INT64, longUdf);
+ public void testPosInt64Input() {
+ runUdfTypeTest("SELECT test_int64(int64_pos) FROM table;", 123L,
Schema.TypeName.INT64);
}
@Test
- public void testNegInt64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(-123);", -123L, Schema.TypeName.INT64,
longUdf);
+ public void testNegInt64Literal() {
+ runUdfTypeTest("SELECT test_int64(-123);", -123L, Schema.TypeName.INT64);
}
@Test
- public void testNegInt64Input() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(int64_neg) FROM table;", -123L,
Schema.TypeName.INT64, longUdf);
+ public void testNegInt64Input() {
+ runUdfTypeTest("SELECT test_int64(int64_neg) FROM table;", -123L,
Schema.TypeName.INT64);
}
@Test
- public void testMaxInt64Literal() throws NoSuchMethodException {
+ public void testMaxInt64Literal() {
runUdfTypeTest(
- "SELECT test(9223372036854775807);", 9223372036854775807L,
Schema.TypeName.INT64, longUdf);
+ "SELECT test_int64(9223372036854775807);", 9223372036854775807L,
Schema.TypeName.INT64);
}
@Test
- public void testMaxInt64Input() throws NoSuchMethodException {
+ public void testMaxInt64Input() {
runUdfTypeTest(
- "SELECT test(int64_max) FROM table;", 9223372036854775807L,
Schema.TypeName.INT64, longUdf);
+ "SELECT test_int64(int64_max) FROM table;", 9223372036854775807L,
Schema.TypeName.INT64);
}
@Test
- public void testMinInt64Literal() throws NoSuchMethodException {
+ public void testMinInt64Literal() {
runUdfTypeTest(
- "SELECT test(-9223372036854775808);",
- -9223372036854775808L,
- Schema.TypeName.INT64,
- longUdf);
+ "SELECT test_int64(-9223372036854775808);", -9223372036854775808L,
Schema.TypeName.INT64);
}
@Test
- public void testMinInt64Input() throws NoSuchMethodException {
+ public void testMinInt64Input() {
runUdfTypeTest(
- "SELECT test(int64_min) FROM table;",
- -9223372036854775808L,
- Schema.TypeName.INT64,
- longUdf);
+ "SELECT test_int64(int64_min) FROM table;", -9223372036854775808L,
Schema.TypeName.INT64);
}
@Test
- public void testEmptyStringLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test('');", "", Schema.TypeName.STRING, stringUdf);
+ public void testEmptyStringLiteral() {
+ runUdfTypeTest("SELECT test_string('');", "", Schema.TypeName.STRING);
}
@Test
- public void testEmptyStringInput() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(string_empty) FROM table;", "",
Schema.TypeName.STRING, stringUdf);
+ public void testEmptyStringInput() {
+ runUdfTypeTest("SELECT test_string(string_empty) FROM table;", "",
Schema.TypeName.STRING);
}
@Test
- public void testAsciiStringLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test('abc');", "abc", Schema.TypeName.STRING,
stringUdf);
+ public void testAsciiStringLiteral() {
+ runUdfTypeTest("SELECT test_string('abc');", "abc",
Schema.TypeName.STRING);
}
@Test
- public void testAsciiStringInput() throws NoSuchMethodException {
- runUdfTypeTest(
- "SELECT test(string_ascii) FROM table;", "abc",
Schema.TypeName.STRING, stringUdf);
+ public void testAsciiStringInput() {
+ runUdfTypeTest("SELECT test_string(string_ascii) FROM table;", "abc",
Schema.TypeName.STRING);
}
@Test
- public void testUnicodeStringLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test('スタリング');", "スタリング", Schema.TypeName.STRING,
stringUdf);
+ public void testUnicodeStringLiteral() {
+ runUdfTypeTest("SELECT test_string('スタリング');", "スタリング",
Schema.TypeName.STRING);
}
@Test
- public void testUnicodeStringInput() throws NoSuchMethodException {
+ public void testUnicodeStringInput() {
runUdfTypeTest(
- "SELECT test(string_unicode) FROM table;", "スタリング",
Schema.TypeName.STRING, stringUdf);
+ "SELECT test_string(string_unicode) FROM table;", "スタリング",
Schema.TypeName.STRING);
}
@Test
- public void testEmptyBytesLiteral() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(b'');", new byte[] {}, Schema.TypeName.BYTES,
bytesUdf);
+ public void testEmptyBytesLiteral() {
+ runUdfTypeTest("SELECT test_bytes(b'');", new byte[] {},
Schema.TypeName.BYTES);
}
@Test
- public void testEmptyBytesInput() throws NoSuchMethodException {
+ public void testEmptyBytesInput() {
runUdfTypeTest(
- "SELECT test(bytes_empty) FROM table;", new byte[] {},
Schema.TypeName.BYTES, bytesUdf);
+ "SELECT test_bytes(bytes_empty) FROM table;", new byte[] {},
Schema.TypeName.BYTES);
}
@Test
- public void testAsciiBytesLiteral() throws NoSuchMethodException {
- runUdfTypeTest(
- "SELECT test(b'abc');", new byte[] {'a', 'b', 'c'},
Schema.TypeName.BYTES, bytesUdf);
+ public void testAsciiBytesLiteral() {
+ runUdfTypeTest("SELECT test_bytes(b'abc');", new byte[] {'a', 'b', 'c'},
Schema.TypeName.BYTES);
}
@Test
- public void testAsciiBytesInput() throws NoSuchMethodException {
+ public void testAsciiBytesInput() {
runUdfTypeTest(
- "SELECT test(bytes_ascii) FROM table;",
+ "SELECT test_bytes(bytes_ascii) FROM table;",
new byte[] {'a', 'b', 'c'},
- Schema.TypeName.BYTES,
- bytesUdf);
+ Schema.TypeName.BYTES);
}
@Test
- public void testUnicodeBytesLiteral() throws NoSuchMethodException {
- runUdfTypeTest(
- "SELECT test(b'ス');", new byte[] {-29, -126, -71},
Schema.TypeName.BYTES, bytesUdf);
+ public void testUnicodeBytesLiteral() {
+ runUdfTypeTest("SELECT test_bytes(b'ス');", new byte[] {-29, -126, -71},
Schema.TypeName.BYTES);
}
@Test
- public void testUnicodeBytesInput() throws NoSuchMethodException {
+ public void testUnicodeBytesInput() {
runUdfTypeTest(
- "SELECT test(bytes_unicode) FROM table;",
+ "SELECT test_bytes(bytes_unicode) FROM table;",
new byte[] {-29, -126, -71},
- Schema.TypeName.BYTES,
- bytesUdf);
+ Schema.TypeName.BYTES);
}
@Test
- public void testZeroFloat64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(0.0);", 0.0, Schema.TypeName.DOUBLE,
doubleUdf);
+ public void testZeroFloat64Literal() {
+ runUdfTypeTest("SELECT test_float64(0.0);", 0.0, Schema.TypeName.DOUBLE);
}
@Test
- public void testZeroFloat64Input() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(float64_0) FROM table;", 0.0,
Schema.TypeName.DOUBLE, doubleUdf);
+ public void testZeroFloat64Input() {
+ runUdfTypeTest("SELECT test_float64(float64_0) FROM table;", 0.0,
Schema.TypeName.DOUBLE);
}
@Test
- public void testNonIntegerFloat64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(0.123);", 0.123, Schema.TypeName.DOUBLE,
doubleUdf);
+ public void testNonIntegerFloat64Literal() {
+ runUdfTypeTest("SELECT test_float64(0.123);", 0.123,
Schema.TypeName.DOUBLE);
}
@Test
- public void testNonIntegerFloat64Input() throws NoSuchMethodException {
+ public void testNonIntegerFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_noninteger) FROM table;", 0.123,
Schema.TypeName.DOUBLE, doubleUdf);
+ "SELECT test_float64(float64_noninteger) FROM table;", 0.123,
Schema.TypeName.DOUBLE);
}
@Test
- public void testPosFloat64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(123.0);", 123.0, Schema.TypeName.DOUBLE,
doubleUdf);
+ public void testPosFloat64Literal() {
+ runUdfTypeTest("SELECT test_float64(123.0);", 123.0,
Schema.TypeName.DOUBLE);
}
@Test
- public void testPosFloat64Input() throws NoSuchMethodException {
- runUdfTypeTest(
- "SELECT test(float64_pos) FROM table;", 123.0, Schema.TypeName.DOUBLE,
doubleUdf);
+ public void testPosFloat64Input() {
+ runUdfTypeTest("SELECT test_float64(float64_pos) FROM table;", 123.0,
Schema.TypeName.DOUBLE);
}
@Test
- public void testNegFloat64Literal() throws NoSuchMethodException {
- runUdfTypeTest("SELECT test(-123.0);", -123.0, Schema.TypeName.DOUBLE,
doubleUdf);
+ public void testNegFloat64Literal() {
+ runUdfTypeTest("SELECT test_float64(-123.0);", -123.0,
Schema.TypeName.DOUBLE);
}
@Test
- public void testNegFloat64Input() throws NoSuchMethodException {
- runUdfTypeTest(
- "SELECT test(float64_neg) FROM table;", -123.0,
Schema.TypeName.DOUBLE, doubleUdf);
+ public void testNegFloat64Input() {
+ runUdfTypeTest("SELECT test_float64(float64_neg) FROM table;", -123.0,
Schema.TypeName.DOUBLE);
}
@Test
- public void testMaxFloat64Literal() throws NoSuchMethodException {
+ public void testMaxFloat64Literal() {
runUdfTypeTest(
- "SELECT test(1.7976931348623157e+308);",
+ "SELECT test_float64(1.7976931348623157e+308);",
1.7976931348623157e+308,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
- public void testMaxFloat64Input() throws NoSuchMethodException {
+ public void testMaxFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_max) FROM table;",
+ "SELECT test_float64(float64_max) FROM table;",
1.7976931348623157e+308,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
- public void testMinPosFloat64Literal() throws NoSuchMethodException {
+ public void testMinPosFloat64Literal() {
runUdfTypeTest(
- "SELECT test(2.2250738585072014e-308);",
+ "SELECT test_float64(2.2250738585072014e-308);",
2.2250738585072014e-308,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
- public void testMinPosFloat64Input() throws NoSuchMethodException {
+ public void testMinPosFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_min_pos) FROM table;",
+ "SELECT test_float64(float64_min_pos) FROM table;",
2.2250738585072014e-308,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
@Ignore(
"+inf is implemented as a ZetaSQL builtin function, so combining it with
a UDF requires Calc splitting (BEAM-12009).")
- public void testPosInfFloat64Literal() throws NoSuchMethodException {
+ public void testPosInfFloat64Literal() {
runUdfTypeTest(
- "SELECT test(CAST('+inf' AS FLOAT64));",
+ "SELECT test_float64(CAST('+inf' AS FLOAT64));",
Double.POSITIVE_INFINITY,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
- public void testPosInfFloat64Input() throws NoSuchMethodException {
+ public void testPosInfFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_inf) FROM table;",
+ "SELECT test_float64(float64_inf) FROM table;",
Double.POSITIVE_INFINITY,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
@Ignore(
"-inf is implemented as a ZetaSQL builtin function, so combining it with
a UDF requires Calc splitting (BEAM-12009).")
- public void testNegInfFloat64Literal() throws NoSuchMethodException {
+ public void testNegInfFloat64Literal() {
runUdfTypeTest(
- "SELECT test(CAST('-inf' AS FLOAT64));",
+ "SELECT test_float64(CAST('-inf' AS FLOAT64));",
Double.NEGATIVE_INFINITY,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
- public void testNegInfFloat64Input() throws NoSuchMethodException {
+ public void testNegInfFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_neg_inf) FROM table;",
+ "SELECT test_float64(float64_neg_inf) FROM table;",
Double.NEGATIVE_INFINITY,
- Schema.TypeName.DOUBLE,
- doubleUdf);
+ Schema.TypeName.DOUBLE);
}
@Test
@Ignore(
"NaN is implemented as a ZetaSQL builtin function, so combining it with
a UDF requires Calc splitting (BEAM-12009).")
- public void testNaNFloat64Literal() throws NoSuchMethodException {
+ public void testNaNFloat64Literal() {
runUdfTypeTest(
- "SELECT test(CAST('NaN' AS FLOAT64));", Double.NaN,
Schema.TypeName.DOUBLE, doubleUdf);
+ "SELECT test_float64(CAST('NaN' AS FLOAT64));", Double.NaN,
Schema.TypeName.DOUBLE);
}
@Test
- public void testNaNFloat64Input() throws NoSuchMethodException {
+ public void testNaNFloat64Input() {
runUdfTypeTest(
- "SELECT test(float64_nan) FROM table;", Double.NaN,
Schema.TypeName.DOUBLE, doubleUdf);
+ "SELECT test_float64(float64_nan) FROM table;", Double.NaN,
Schema.TypeName.DOUBLE);
}
-
- // TODO(ibzib) Test that dates and times are rejected.
- // TODO(ibzib) Test arrays.
- // TODO(ibzib) Test structs.
}