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 e9bdda9 [BEAM-11834] Enable arrays literals to have null values.
new 3a0a3b4 Merge pull request #14017 from ibzib/BEAM-11834
e9bdda9 is described below
commit e9bdda9e037600dcda597fd6b105966b0ebeb073
Author: Kyle Weaver <[email protected]>
AuthorDate: Thu Feb 18 13:09:54 2021 -0800
[BEAM-11834] Enable arrays literals to have null values.
---
.../beam/sdk/extensions/sql/impl/utils/CalciteUtils.java | 2 +-
.../sql/zetasql/ZetaSqlCalciteTranslationUtils.java | 5 ++++-
.../extensions/sql/zetasql/ZetaSqlDialectSpecTest.java | 16 ++++++++++++++++
3 files changed, 21 insertions(+), 2 deletions(-)
diff --git
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/utils/CalciteUtils.java
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/utils/CalciteUtils.java
index acd6e6c..10ad199 100644
---
a/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/utils/CalciteUtils.java
+++
b/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/impl/utils/CalciteUtils.java
@@ -234,7 +234,7 @@ public class CalciteUtils {
return FieldType.row(toSchema(calciteType));
default:
- return toFieldType(calciteType.getSqlTypeName());
+ return
toFieldType(calciteType.getSqlTypeName()).withNullable(calciteType.isNullable());
}
}
diff --git
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlCalciteTranslationUtils.java
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlCalciteTranslationUtils.java
index 203337c..dd59c26 100644
---
a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlCalciteTranslationUtils.java
+++
b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlCalciteTranslationUtils.java
@@ -290,7 +290,10 @@ public final class ZetaSqlCalciteTranslationUtils {
private static RexNode arrayValueToRexNode(Value value, RexBuilder
rexBuilder) {
return rexBuilder.makeCall(
- toCalciteArrayType(value.getType().asArray().getElementType(), false,
rexBuilder),
+ toCalciteArrayType(
+ value.getType().asArray().getElementType(),
+ value.getElementList().stream().anyMatch(v -> v.isNull()),
+ rexBuilder),
SqlStdOperatorTable.ARRAY_VALUE_CONSTRUCTOR,
value.getElementList().stream()
.map(v -> toRexNode(v, rexBuilder))
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 df5959e..4a07989 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
@@ -2421,6 +2421,22 @@ public class ZetaSqlDialectSpecTest extends
ZetaSqlTestBase {
}
@Test
+ public void testUnnestLiteralWithNullElements() {
+ String sql = "SELECT * FROM UNNEST(ARRAY<STRING>['foo', NULL, 'bar']);";
+ ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config);
+ BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(sql);
+
+ PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline,
beamRelNode);
+ Schema schema = Schema.builder().addNullableField("str_field",
FieldType.STRING).build();
+ PAssert.that(stream)
+ .containsInAnyOrder(
+ Row.withSchema(schema).addValues("foo").build(),
+ Row.withSchema(schema).addValues((String) null).build(),
+ Row.withSchema(schema).addValues("bar").build());
+
pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES));
+ }
+
+ @Test
public void testUNNESTParameters() {
String sql = "SELECT * FROM UNNEST(@p0);";
ImmutableMap<String, Value> params =