1
1
package com .clickhouse .jdbc ;
2
2
3
3
import com .clickhouse .client .api .ClientConfigProperties ;
4
+ import com .clickhouse .client .api .DataTypeUtils ;
4
5
import com .clickhouse .client .api .internal .ServerSettings ;
5
6
import com .clickhouse .data .ClickHouseVersion ;
6
7
import com .clickhouse .data .Tuple ;
26
27
import java .sql .Statement ;
27
28
import java .sql .Timestamp ;
28
29
import java .text .DecimalFormat ;
30
+ import java .time .Instant ;
29
31
import java .time .LocalDate ;
30
32
import java .time .LocalDateTime ;
31
33
import java .time .OffsetDateTime ;
@@ -207,8 +209,8 @@ public void testIntegerTypes() throws SQLException {
207
209
assertTrue (rs .next ());
208
210
assertEquals (rs .getObject ("int8" ), (byte )int8 );
209
211
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 );
212
214
assertEquals (rs .getObject ("int128" ), int128 );
213
215
assertEquals (rs .getObject ("int256" ), int256 );
214
216
assertEquals (rs .getObject ("uint8" ), uint8 );
@@ -269,28 +271,28 @@ public void testUnsignedIntegerTypes() throws Exception {
269
271
270
272
271
273
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 );
278
280
279
281
assertTrue (rs .next ());
280
282
assertEquals ((Short ) rs .getObject ("uint8" ), (byte ) 0 );
281
283
assertEquals ((Integer ) rs .getObject ("uint16" ), (short ) 0 );
282
284
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 );
286
288
287
289
assertTrue (rs .next ());
288
290
assertEquals (((Short ) rs .getObject ("uint8" )).intValue (), uint8 );
289
291
assertEquals ((Integer ) rs .getObject ("uint16" ), uint16 );
290
292
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 );
294
296
295
297
assertFalse (rs .next ());
296
298
}
@@ -317,11 +319,11 @@ public void testUUIDTypes() throws Exception {
317
319
ResultSet rs = stmt .executeQuery ("SELECT uuid FROM test_uuids ORDER BY order" )) {
318
320
319
321
assertTrue (rs .next ());
320
- assertNull (( UUID ) rs .getObject ("uuid" ));
322
+ assertNull (rs .getObject ("uuid" ));
321
323
322
324
323
325
assertTrue (rs .next ());
324
- assertEquals (( UUID ) rs .getObject ("uuid" ), uuid );
326
+ assertEquals (rs .getObject ("uuid" ), uuid );
325
327
326
328
assertFalse (rs .next ());
327
329
}
@@ -550,6 +552,57 @@ public void testDateTypes() throws SQLException {
550
552
}
551
553
}
552
554
}
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
+ }
553
606
}
554
607
555
608
@@ -1446,7 +1499,7 @@ public void testTypeConversions() throws Exception {
1446
1499
assertEquals (rs .getTimestamp (5 ).toString (), "2024-12-01 12:34:56.0" );
1447
1500
assertTrue (rs .getObject (5 ) instanceof Timestamp );
1448
1501
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 " );
1450
1503
assertEquals (rs .getObject (5 , LocalDateTime .class ), LocalDateTime .of (2024 , 12 , 1 , 12 , 34 , 56 ));
1451
1504
assertEquals (rs .getObject (5 , ZonedDateTime .class ), ZonedDateTime .of (2024 , 12 , 1 , 12 , 34 , 56 , 0 , ZoneId .of ("UTC" )));
1452
1505
assertEquals (String .valueOf (rs .getObject (5 , new HashMap <String , Class <?>>(){{put (JDBCType .TIMESTAMP .getName (), LocalDateTime .class );}})), "2024-12-01T12:34:56" );
0 commit comments