From 2aa350fe65028bf93e8404285f0fdc1925003b0b Mon Sep 17 00:00:00 2001 From: rahul8383 Date: Tue, 5 May 2020 13:03:30 +0530 Subject: [PATCH 1/2] [BEAM-9887] Expected Exception when building Row with logical types with Invalid input --- .../org/apache/beam/sdk/values/RowUtils.java | 2 +- .../org/apache/beam/sdk/values/RowTest.java | 29 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java index 3a7c860cf10c..e53440a0fe51 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java @@ -519,7 +519,7 @@ public Object processLogicalType( Object retValue = null; FieldOverride override = override(rowPosition); if (override != null) { - retValue = override.getOverrideValue(); + retValue = logicalType.toInputType(logicalType.toBaseType(override.getOverrideValue())); } else if (value != null) { retValue = logicalType.toInputType(logicalType.toBaseType(value)); } diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/values/RowTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/values/RowTest.java index a9fbc7955e78..7134e02eef61 100644 --- a/sdks/java/core/src/test/java/org/apache/beam/sdk/values/RowTest.java +++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/values/RowTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.math.BigDecimal; import java.nio.ByteBuffer; @@ -34,12 +35,12 @@ import org.apache.beam.sdk.schemas.Schema; import org.apache.beam.sdk.schemas.Schema.FieldType; import org.apache.beam.sdk.schemas.logicaltypes.EnumerationType; +import org.apache.beam.sdk.schemas.logicaltypes.FixedBytes; 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; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Lists; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; -import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -724,7 +725,7 @@ public void testByteArrayEquality() { Row a = Row.withSchema(schema).addValue(a0).build(); Row b = Row.withSchema(schema).addValue(b0).build(); - Assert.assertEquals(a, b); + assertEquals(a, b); } @Test @@ -737,6 +738,28 @@ public void testByteBufferEquality() { Row a = Row.withSchema(schema).addValue(ByteBuffer.wrap(a0)).build(); Row b = Row.withSchema(schema).addValue(ByteBuffer.wrap(b0)).build(); - Assert.assertEquals(a, b); + assertEquals(a, b); + } + + @Test(expected = IllegalArgumentException.class) + public void testLogicalTypeWithInvalidInputValueByFieldName() { + Schema schema = Schema.builder().addLogicalTypeField("char", FixedBytes.of(10)).build(); + byte[] byteArrayWithLengthFive = {1, 2, 3, 4, 5}; + Row row = Row.withSchema(schema).withFieldValue("char", byteArrayWithLengthFive).build(); + } + + @Test(expected = IllegalArgumentException.class) + public void testLogicalTypeWithInvalidInputValueByFieldIndex() { + Schema schema = Schema.builder().addLogicalTypeField("char", FixedBytes.of(10)).build(); + byte[] byteArrayWithLengthFive = {1, 2, 3, 4, 5}; + Row row = Row.withSchema(schema).addValues(byteArrayWithLengthFive).build(); + } + + @Test + public void testFixedBytes() { + Schema schema = Schema.builder().addLogicalTypeField("char", FixedBytes.of(10)).build(); + byte[] byteArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + Row row = Row.withSchema(schema).withFieldValue("char", byteArray).build(); + assertTrue(Arrays.equals(byteArray, row.getLogicalTypeValue("char", byte[].class))); } } From 4566de4f4083f3066b3e129feffdec4f43a06c50 Mon Sep 17 00:00:00 2001 From: rahul8383 Date: Tue, 5 May 2020 17:39:56 +0530 Subject: [PATCH 2/2] Fix failed BeamComplexTypeTest.testNullDatetimeFields Test to handle null values --- .../beam/sdk/extensions/sql/BeamComplexTypeTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamComplexTypeTest.java b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamComplexTypeTest.java index ce46c17c29e9..8b3d7e502d26 100644 --- a/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamComplexTypeTest.java +++ b/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamComplexTypeTest.java @@ -430,12 +430,12 @@ public Schema.FieldType getBaseType() { @Override public Instant toBaseType(Long input) { - return new Instant((long) input); + return (input == null ? null : new Instant((long) input)); } @Override public Long toInputType(Instant base) { - return base.getMillis(); + return (base == null ? null : base.getMillis()); } } @@ -462,12 +462,12 @@ public Schema.FieldType getBaseType() { @Override public Instant toBaseType(Long input) { - return new Instant((long) input); + return (input == null ? null : new Instant((long) input)); } @Override public Long toInputType(Instant base) { - return base.getMillis(); + return (base == null ? null : base.getMillis()); } }