nastra commented on code in PR #17513:
URL: https://github.com/apache/iceberg/pull/17513#discussion_r3713078448
##########
api/src/test/java/org/apache/iceberg/types/TestTypeUtil.java:
##########
@@ -972,6 +972,103 @@ public void ancestorFieldsInNestedSchema() {
assertThat(TypeUtil.ancestorFields(schema,
17)).containsExactly(pointsElement, points);
}
+ @Test
+ public void isNullableWithUnknownFieldId() {
+ Schema schema = new Schema(required(1, "id", IntegerType.get()));
+
+ assertThat(TypeUtil.isNullable(schema, 2)).isTrue();
+ }
+
+ @Test
+ public void isNullableWithTopLevelFields() {
+ Schema schema =
+ new Schema(
+ required(1, "id", IntegerType.get()), optional(2, "data",
Types.StringType.get()));
+
+ assertThat(TypeUtil.isNullable(schema, 1)).isFalse();
+ assertThat(TypeUtil.isNullable(schema, 2)).isTrue();
+ }
+
+ @Test
+ public void isNullableWithNestedStructs() {
+ Schema schema =
+ new Schema(
+ required(
+ 1,
+ "required_location",
+ Types.StructType.of(
+ required(3, "required_lat", Types.DoubleType.get()),
+ optional(4, "optional_lon", Types.DoubleType.get()),
+ required(
+ 5,
+ "required_inner",
+ Types.StructType.of(required(6, "required_zip",
IntegerType.get()))))),
+ optional(
+ 2,
+ "optional_location",
+ Types.StructType.of(
+ required(7, "required_lat", Types.DoubleType.get()),
+ required(
+ 8,
+ "required_inner",
+ Types.StructType.of(required(9, "required_zip",
IntegerType.get()))))));
+
+ // a required field is not null when every field that contains it is
required
+ assertThat(TypeUtil.isNullable(schema, 1)).isFalse();
+ assertThat(TypeUtil.isNullable(schema, 3)).isFalse();
+ assertThat(TypeUtil.isNullable(schema, 5)).isFalse();
+ assertThat(TypeUtil.isNullable(schema, 6)).isFalse();
+
+ // an optional field is null regardless of the fields that contain it
+ assertThat(TypeUtil.isNullable(schema, 4)).isTrue();
+
+ // a required field nested in an optional struct is null when the struct
is null
+ assertThat(TypeUtil.isNullable(schema, 2)).isTrue();
+ assertThat(TypeUtil.isNullable(schema, 7)).isTrue();
+ assertThat(TypeUtil.isNullable(schema, 8)).isTrue();
+ assertThat(TypeUtil.isNullable(schema, 9)).isTrue();
+ }
+
+ @Test
+ public void isNullableWithListsAndMaps() {
+ Schema schema =
+ new Schema(
+ required(
+ 1,
+ "required_points",
+ Types.ListType.ofRequired(
+ 4, Types.StructType.of(required(5, "required_x",
Types.LongType.get())))),
+ optional(
+ 2,
+ "optional_points",
+ Types.ListType.ofOptional(
+ 6, Types.StructType.of(required(7, "required_x",
Types.LongType.get())))),
Review Comment:
makes sense, updated the tests
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]