You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by bh...@apache.org on 2021/11/19 16:30:04 UTC

[beam] branch master updated: [BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)

This is an automated email from the ASF dual-hosted git repository.

bhulette 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 4392c58  [BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)
4392c58 is described below

commit 4392c5897b0bba7baeee41253f90cd251436d323
Author: Brian Hulette <bh...@google.com>
AuthorDate: Fri Nov 19 08:29:04 2021 -0800

    [BEAM-13286] RowJson should expect ReadableInstant for DATETIME values in Rows (#16015)
    
    * DATETIME internal value is a ReadableInstant
    
    * Cast, dont assert
    
    * Spotless :(
---
 .../core/src/main/java/org/apache/beam/sdk/util/RowJson.java |  5 +++--
 .../src/test/java/org/apache/beam/sdk/util/RowJsonTest.java  | 12 +++++++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
index 351eacb..be794eb 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/util/RowJson.java
@@ -72,7 +72,7 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
 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.ImmutableSet;
 import org.checkerframework.checker.nullness.qual.Nullable;
-import org.joda.time.DateTime;
+import org.joda.time.ReadableInstant;
 
 /**
  * Jackson serializer and deserializer for {@link Row Rows}.
@@ -527,7 +527,8 @@ public class RowJson {
           gen.writeNumber((BigDecimal) value);
           break;
         case DATETIME:
-          gen.writeString(((DateTime) value).toString()); // ISO 8601 format
+          // ReadableInstant.toString produces ISO8601 format string
+          gen.writeString(((ReadableInstant) value).toString());
           break;
         case ARRAY:
         case ITERABLE:
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
index 4ff907c..2292688 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/util/RowJsonTest.java
@@ -42,6 +42,8 @@ import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Immutabl
 import org.hamcrest.Matcher;
 import org.hamcrest.Matchers;
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.ReadableInstant;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
@@ -93,6 +95,7 @@ public class RowJsonTest {
               .addBooleanField("f_boolean")
               .addStringField("f_string")
               .addDecimalField("f_decimal")
+              .addDateTimeField("f_timestamp")
               .build();
 
       String rowString =
@@ -105,7 +108,8 @@ public class RowJsonTest {
               + "\"f_double\" : 62.2,\n"
               + "\"f_boolean\" : true,\n"
               + "\"f_string\" : \"hello\",\n"
-              + "\"f_decimal\" : 123.12\n"
+              + "\"f_decimal\" : 123.12,\n"
+              + "\"f_timestamp\" : \"2021-11-18T08:45:38.000Z\"\n"
               + "}";
 
       Row expectedRow =
@@ -119,7 +123,8 @@ public class RowJsonTest {
                   62.2d,
                   true,
                   "hello",
-                  new BigDecimal("123.12"))
+                  new BigDecimal("123.12"),
+                  new DateTime(2021, 11, 18, 8, 45, 38, DateTimeZone.UTC).toInstant())
               .build();
 
       return new Object[] {"Flat row", schema, rowString, expectedRow};
@@ -325,7 +330,8 @@ public class RowJsonTest {
     private static final Double DOUBLE_VALUE = 1.02d;
     private static final String DOUBLE_STRING = "1.02";
     private static final String DATETIME_STRING = "2014-09-27T20:30:00.450Z";
-    private static final DateTime DATETIME_VALUE = DateTime.parse(DATETIME_STRING);
+    private static final ReadableInstant DATETIME_VALUE =
+        DateTime.parse(DATETIME_STRING).toInstant();
 
     @Rule public ExpectedException thrown = ExpectedException.none();