You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by jb...@apache.org on 2019/06/26 08:11:57 UTC
[beam] branch release-2.14.0 updated: [BEAM-7606] Fix JDBC time
conversion tests
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 <ch...@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()