Skip to content

Commit fda7067

Browse files
committed
Add tests
1 parent 96e3bdb commit fda7067

File tree

1 file changed

+58
-2
lines changed

1 file changed

+58
-2
lines changed

flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/TimestampResultSetTest.java

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
*/
1717
package org.apache.arrow.driver.jdbc;
1818

19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
1921
import com.google.common.collect.ImmutableList;
2022
import java.sql.Connection;
23+
import java.sql.Date;
2124
import java.sql.PreparedStatement;
2225
import java.sql.ResultSet;
2326
import java.sql.SQLException;
@@ -26,6 +29,7 @@
2629
import java.time.Instant;
2730
import java.time.LocalDateTime;
2831
import java.time.OffsetDateTime;
32+
import java.time.ZoneId;
2933
import java.time.ZoneOffset;
3034
import java.time.ZonedDateTime;
3135
import java.util.Calendar;
@@ -51,6 +55,8 @@
5155
*/
5256
public class TimestampResultSetTest {
5357
private static final MockFlightSqlProducer FLIGHT_SQL_PRODUCER = new MockFlightSqlProducer();
58+
private static Instant firstDay2025 =
59+
OffsetDateTime.of(2025, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).toInstant();
5460

5561
@RegisterExtension public static FlightServerTestExtension FLIGHT_SERVER_TEST_EXTENSION;
5662

@@ -70,8 +76,6 @@ public class TimestampResultSetTest {
7076

7177
@BeforeAll
7278
public static void setup() throws SQLException {
73-
Instant firstDay2025 = OffsetDateTime.of(2025, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).toInstant();
74-
7579
FLIGHT_SQL_PRODUCER.addSelectQuery(
7680
QUERY_STRING,
7781
QUERY_SCHEMA,
@@ -161,4 +165,56 @@ public void test() {
161165
throw new RuntimeException(e);
162166
}
163167
}
168+
169+
@Test
170+
public void testTzConnectionOptionIsRespected() {
171+
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
172+
try (Connection connection = FLIGHT_SERVER_TEST_EXTENSION.getConnection("GTM+1")) {
173+
try (PreparedStatement s = connection.prepareStatement(QUERY_STRING)) {
174+
try (ResultSet rs = s.executeQuery()) {
175+
int numCols = rs.getMetaData().getColumnCount();
176+
try {
177+
rs.next();
178+
for (int i = 1; i <= numCols; i++) {
179+
int type = rs.getMetaData().getColumnType(i);
180+
String name = rs.getMetaData().getColumnName(i);
181+
Date date = rs.getDate(i);
182+
Timestamp timestamp = rs.getTimestamp(i);
183+
String string = rs.getString(i);
184+
Timestamp object = (Timestamp) rs.getObject(i);
185+
Timestamp objectWithClass = rs.getObject(i, Timestamp.class);
186+
Timestamp timestampWithDefaultCalendar = rs.getTimestamp(i, Calendar.getInstance());
187+
Timestamp timestampWithUTCCalendar =
188+
rs.getTimestamp(i, Calendar.getInstance(TimeZone.getTimeZone("UTC")));
189+
LocalDateTime objectLocalDateTime = rs.getObject(i, LocalDateTime.class);
190+
191+
assertEquals(timestamp, object, "Mismatch for column " + name);
192+
assertEquals(timestamp, objectWithClass, "Mismatch for column " + name);
193+
assertEquals(timestamp.toString(), string, "Mismatch for column " + name);
194+
assertEquals(timestamp.toString(), object.toString(), "Mismatch for column " + name);
195+
assertEquals(
196+
objectLocalDateTime,
197+
LocalDateTime.ofInstant(firstDay2025, ZoneId.of("UTC")),
198+
"Mismatch for column " + name);
199+
200+
if (type == Types.TIMESTAMP_WITH_TIMEZONE) {
201+
Instant instant = rs.getObject(i, Instant.class);
202+
OffsetDateTime offsetDateTime = rs.getObject(i, OffsetDateTime.class);
203+
ZonedDateTime zonedDateTime = rs.getObject(i, ZonedDateTime.class);
204+
assertEquals(firstDay2025, instant, "Mismatch for column " + name);
205+
assertEquals(
206+
firstDay2025, offsetDateTime.toInstant(), "Mismatch for column " + name);
207+
assertEquals(
208+
firstDay2025, zonedDateTime.toInstant(), "Mismatch for column " + name);
209+
}
210+
}
211+
} catch (SQLException e) {
212+
throw new RuntimeException(e);
213+
}
214+
}
215+
}
216+
} catch (SQLException e) {
217+
throw new RuntimeException(e);
218+
}
219+
}
164220
}

0 commit comments

Comments
 (0)