This is an automated email from the ASF dual-hosted git repository. jbonofre pushed a commit to branch release-2.14.0 in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/release-2.14.0 by this push: new 1496ad1 [BEAM-7606] Fix JDBC time conversion tests new a52ffee Merge pull request #8938 from iemejia/release-2.14.0 1496ad1 is described below commit 1496ad11dc627341990444305963d32052b6496c Author: Charith Ellawala <charith.ellaw...@gmail.com> AuthorDate: Fri Jun 21 17:52:36 2019 +0100 [BEAM-7606] Fix JDBC time conversion tests --- .../main/java/org/apache/beam/sdk/io/jdbc/SchemaUtil.java | 15 ++++++++------- .../java/org/apache/beam/sdk/io/jdbc/SchemaUtilTest.java | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/SchemaUtil.java b/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/SchemaUtil.java index 263c2de..9c1dcb0 100644 --- a/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/SchemaUtil.java +++ b/sdks/java/io/jdbc/src/main/java/org/apache/beam/sdk/io/jdbc/SchemaUtil.java @@ -38,13 +38,14 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Time; import java.sql.Timestamp; -import java.time.LocalDate; import java.time.LocalTime; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.Calendar; import java.util.EnumMap; import java.util.List; +import java.util.TimeZone; import java.util.function.BiFunction; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -52,6 +53,7 @@ import org.apache.beam.sdk.schemas.Schema; import org.apache.beam.sdk.values.Row; import org.apache.beam.vendor.guava.v20_0.com.google.common.collect.ImmutableMap; import org.joda.time.DateTime; +import org.joda.time.LocalDate; import org.joda.time.chrono.ISOChronology; /** Provides utility functions for working with Beam {@link Schema} types. */ @@ -273,7 +275,7 @@ class SchemaUtil { /** Convert SQL date type to Beam DateTime. */ private static ResultSetFieldExtractor createDateExtractor() { return (rs, i) -> { - Date date = rs.getDate(i); + Date date = rs.getDate(i, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))); if (date == null) { return null; } @@ -285,20 +287,19 @@ class SchemaUtil { /** Convert SQL time type to Beam DateTime. */ private static ResultSetFieldExtractor createTimeExtractor() { return (rs, i) -> { - Time time = rs.getTime(i); + Time time = rs.getTime(i, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))); if (time == null) { return null; } - ZonedDateTime zdt = - ZonedDateTime.of(LocalDate.ofEpochDay(0), time.toLocalTime(), ZoneOffset.systemDefault()); - return new DateTime(zdt.toInstant().toEpochMilli(), ISOChronology.getInstanceUTC()); + return new DateTime(time.getTime(), ISOChronology.getInstanceUTC()) + .withDate(new LocalDate(0L)); }; } /** Convert SQL timestamp type to Beam DateTime. */ private static ResultSetFieldExtractor createTimestampExtractor() { return (rs, i) -> { - Timestamp ts = rs.getTimestamp(i); + Timestamp ts = rs.getTimestamp(i, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC))); if (ts == null) { return null; } diff --git a/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/SchemaUtilTest.java b/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/SchemaUtilTest.java index 63b3d88..f606bde 100644 --- a/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/SchemaUtilTest.java +++ b/sdks/java/io/jdbc/src/test/java/org/apache/beam/sdk/io/jdbc/SchemaUtilTest.java @@ -18,6 +18,7 @@ package org.apache.beam.sdk.io.jdbc; import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -128,7 +129,7 @@ public class SchemaUtilTest { } @Test - public void testBeamRowMapper_array() throws Exception { + public void testBeamRowMapperArray() throws Exception { ResultSet mockArrayElementsResultSet = mock(ResultSet.class); when(mockArrayElementsResultSet.next()).thenReturn(true, true, true, false); when(mockArrayElementsResultSet.getInt(eq(1))).thenReturn(10, 20, 30); @@ -151,7 +152,7 @@ public class SchemaUtilTest { } @Test - public void testBeamRowMapper_primitiveTypes() throws Exception { + public void testBeamRowMapperPrimitiveTypes() throws Exception { ResultSet mockResultSet = mock(ResultSet.class); when(mockResultSet.getLong(eq(1))).thenReturn(42L); when(mockResultSet.getBytes(eq(2))).thenReturn("binary".getBytes(Charset.forName("UTF-8"))); @@ -221,14 +222,14 @@ public class SchemaUtilTest { } @Test - public void testBeamRowMapper_datetime() throws Exception { + public void testBeamRowMapperDateTime() throws Exception { long epochMilli = 1558719710000L; ResultSet mockResultSet = mock(ResultSet.class); - when(mockResultSet.getDate(eq(1))).thenReturn(new Date(epochMilli)); - when(mockResultSet.getTime(eq(2))).thenReturn(new Time(epochMilli)); - when(mockResultSet.getTimestamp(eq(3))).thenReturn(new Timestamp(epochMilli)); - when(mockResultSet.getTimestamp(eq(4))).thenReturn(new Timestamp(epochMilli)); + when(mockResultSet.getDate(eq(1), any())).thenReturn(new Date(epochMilli)); + when(mockResultSet.getTime(eq(2), any())).thenReturn(new Time(epochMilli)); + when(mockResultSet.getTimestamp(eq(3), any())).thenReturn(new Timestamp(epochMilli)); + when(mockResultSet.getTimestamp(eq(4), any())).thenReturn(new Timestamp(epochMilli)); Schema wantSchema = Schema.builder()