11package com .clickhouse .jdbc ;
22
33import com .clickhouse .client .api .ClientConfigProperties ;
4+ import com .clickhouse .client .api .DataTypeUtils ;
45import com .clickhouse .client .api .internal .ServerSettings ;
56import com .clickhouse .data .ClickHouseVersion ;
67import com .clickhouse .data .Tuple ;
2627import java .sql .Statement ;
2728import java .sql .Timestamp ;
2829import java .text .DecimalFormat ;
30+ import java .time .Instant ;
2931import java .time .LocalDate ;
3032import java .time .LocalDateTime ;
3133import java .time .OffsetDateTime ;
@@ -207,8 +209,8 @@ public void testIntegerTypes() throws SQLException {
207209 assertTrue (rs .next ());
208210 assertEquals (rs .getObject ("int8" ), (byte )int8 );
209211 assertEquals (rs .getObject ("int16" ), (short )int16 );
210- assertEquals (rs .getObject ("int32" ), ( int ) int32 );
211- assertEquals (rs .getObject ("int64" ), ( long ) int64 );
212+ assertEquals (rs .getObject ("int32" ), int32 );
213+ assertEquals (rs .getObject ("int64" ), int64 );
212214 assertEquals (rs .getObject ("int128" ), int128 );
213215 assertEquals (rs .getObject ("int256" ), int256 );
214216 assertEquals (rs .getObject ("uint8" ), uint8 );
@@ -269,28 +271,28 @@ public void testUnsignedIntegerTypes() throws Exception {
269271
270272
271273 assertTrue (rs .next ());
272- assertEquals (( Short ) rs .getObject ("uint8" ), null );
273- assertEquals (( Integer ) rs .getObject ("uint16" ), null );
274- assertEquals (( Long ) rs .getObject ("uint32" ), null );
275- assertEquals (( BigInteger ) rs .getObject ("uint64" ), null );
276- assertEquals (( BigInteger ) rs .getObject ("uint128" ), null );
277- assertEquals (( BigInteger ) rs .getObject ("uint256" ), null );
274+ assertEquals (rs .getObject ("uint8" ), null );
275+ assertEquals (rs .getObject ("uint16" ), null );
276+ assertEquals (rs .getObject ("uint32" ), null );
277+ assertEquals (rs .getObject ("uint64" ), null );
278+ assertEquals (rs .getObject ("uint128" ), null );
279+ assertEquals (rs .getObject ("uint256" ), null );
278280
279281 assertTrue (rs .next ());
280282 assertEquals ((Short ) rs .getObject ("uint8" ), (byte ) 0 );
281283 assertEquals ((Integer ) rs .getObject ("uint16" ), (short ) 0 );
282284 assertEquals ((Long ) rs .getObject ("uint32" ), 0 );
283- assertEquals (( BigInteger ) rs .getObject ("uint64" ), BigInteger .ZERO );
284- assertEquals (( BigInteger ) rs .getObject ("uint128" ), BigInteger .ZERO );
285- assertEquals (( BigInteger ) rs .getObject ("uint256" ), BigInteger .ZERO );
285+ assertEquals (rs .getObject ("uint64" ), BigInteger .ZERO );
286+ assertEquals (rs .getObject ("uint128" ), BigInteger .ZERO );
287+ assertEquals (rs .getObject ("uint256" ), BigInteger .ZERO );
286288
287289 assertTrue (rs .next ());
288290 assertEquals (((Short ) rs .getObject ("uint8" )).intValue (), uint8 );
289291 assertEquals ((Integer ) rs .getObject ("uint16" ), uint16 );
290292 assertEquals ((Long ) rs .getObject ("uint32" ), uint32 );
291- assertEquals (( BigInteger ) rs .getObject ("uint64" ), BigInteger .valueOf (uint64 ));
292- assertEquals (( BigInteger ) rs .getObject ("uint128" ), uint128 );
293- assertEquals (( BigInteger ) rs .getObject ("uint256" ), uint256 );
293+ assertEquals (rs .getObject ("uint64" ), BigInteger .valueOf (uint64 ));
294+ assertEquals (rs .getObject ("uint128" ), uint128 );
295+ assertEquals (rs .getObject ("uint256" ), uint256 );
294296
295297 assertFalse (rs .next ());
296298 }
@@ -317,11 +319,11 @@ public void testUUIDTypes() throws Exception {
317319 ResultSet rs = stmt .executeQuery ("SELECT uuid FROM test_uuids ORDER BY order" )) {
318320
319321 assertTrue (rs .next ());
320- assertNull (( UUID ) rs .getObject ("uuid" ));
322+ assertNull (rs .getObject ("uuid" ));
321323
322324
323325 assertTrue (rs .next ());
324- assertEquals (( UUID ) rs .getObject ("uuid" ), uuid );
326+ assertEquals (rs .getObject ("uuid" ), uuid );
325327
326328 assertFalse (rs .next ());
327329 }
@@ -550,6 +552,57 @@ public void testDateTypes() throws SQLException {
550552 }
551553 }
552554 }
555+
556+ try (Connection conn = getJdbcConnection ();
557+ Statement stmt = conn .createStatement ();
558+ ResultSet rs = stmt .executeQuery ("SELECT * FROM test_dates ORDER BY order" ))
559+ {
560+ assertTrue (rs .next ());
561+ assertEquals (rs .getString ("date" ), "1970-01-01" );
562+ assertEquals (rs .getString ("date32" ), "1970-01-01" );
563+ assertEquals (rs .getString ("dateTime" ), "1970-01-01 00:00:00" );
564+ assertEquals (rs .getString ("dateTime32" ), "1970-01-01 00:00:00" );
565+ assertEquals (rs .getString ("dateTime643" ), "1970-01-01T00:00Z[UTC]" );
566+ assertEquals (rs .getString ("dateTime646" ), "1970-01-01T00:00Z[UTC]" );
567+ assertEquals (rs .getString ("dateTime649" ), "1970-01-01T00:00Z[UTC]" );
568+
569+ assertTrue (rs .next ());
570+ assertEquals (rs .getString ("date" ), "2149-06-06" );
571+ assertEquals (rs .getString ("date32" ), "2299-12-31" );
572+ assertEquals (rs .getString ("dateTime" ), "2106-02-07 06:28:15" );
573+ assertEquals (rs .getString ("dateTime32" ), "2106-02-07 06:28:15" );
574+ assertEquals (rs .getString ("dateTime643" ), "2261-12-31T23:59:59.999Z[UTC]" );
575+ assertEquals (rs .getString ("dateTime646" ), "2261-12-31T23:59:59.999999Z[UTC]" );
576+ assertEquals (rs .getString ("dateTime649" ), "2261-12-31T23:59:59.999999999Z[UTC]" );
577+
578+ ZoneId tzServer = ZoneId .of (((ConnectionImpl ) conn ).getClient ().getServerTimeZone ());
579+ assertTrue (rs .next ());
580+ assertEquals (
581+ rs .getString ("date" ),
582+ Instant .ofEpochMilli (date .getTime ()).atZone (tzServer ).toLocalDate ().toString ());
583+ assertEquals (
584+ rs .getString ("date32" ),
585+ Instant .ofEpochMilli (date32 .getTime ()).atZone (tzServer ).toLocalDate ().toString ());
586+ assertEquals (
587+ rs .getString ("dateTime" ),
588+ DataTypeUtils .DATETIME_FORMATTER .format (
589+ Instant .ofEpochMilli (dateTime .getTime ()).atZone (tzServer )));
590+ assertEquals (
591+ rs .getString ("dateTime32" ),
592+ DataTypeUtils .DATETIME_FORMATTER .format (
593+ Instant .ofEpochMilli (dateTime32 .getTime ()).atZone (tzServer )));
594+ assertEquals (
595+ rs .getString ("dateTime643" ),
596+ dateTime643 .toInstant ().atZone (tzServer ).toString ());
597+ assertEquals (
598+ rs .getString ("dateTime646" ),
599+ dateTime646 .toInstant ().atZone (tzServer ).toString ());
600+ assertEquals (
601+ rs .getString ("dateTime649" ),
602+ dateTime649 .toInstant ().atZone (tzServer ).toString ());
603+
604+ assertFalse (rs .next ());
605+ }
553606 }
554607
555608
@@ -1446,7 +1499,7 @@ public void testTypeConversions() throws Exception {
14461499 assertEquals (rs .getTimestamp (5 ).toString (), "2024-12-01 12:34:56.0" );
14471500 assertTrue (rs .getObject (5 ) instanceof Timestamp );
14481501 assertEquals (rs .getObject (5 ), Timestamp .valueOf ("2024-12-01 12:34:56" ));
1449- assertEquals (rs .getString (5 ), "2024-12-01T12 :34:56Z[UTC] " );
1502+ assertEquals (rs .getString (5 ), "2024-12-01 12 :34:56 " );
14501503 assertEquals (rs .getObject (5 , LocalDateTime .class ), LocalDateTime .of (2024 , 12 , 1 , 12 , 34 , 56 ));
14511504 assertEquals (rs .getObject (5 , ZonedDateTime .class ), ZonedDateTime .of (2024 , 12 , 1 , 12 , 34 , 56 , 0 , ZoneId .of ("UTC" )));
14521505 assertEquals (String .valueOf (rs .getObject (5 , new HashMap <String , Class <?>>(){{put (JDBCType .TIMESTAMP .getName (), LocalDateTime .class );}})), "2024-12-01T12:34:56" );
0 commit comments