Skip to content

Commit 2d2ca7c

Browse files
committed
added time/date/timestamp tests
1 parent d631837 commit 2d2ca7c

File tree

3 files changed

+107
-26
lines changed

3 files changed

+107
-26
lines changed

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/ValueConverters.java

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
import java.math.BigDecimal;
66
import java.math.BigInteger;
7+
import java.net.MalformedURLException;
8+
import java.net.URL;
79
import java.sql.Date;
810
import java.sql.Time;
911
import java.sql.Timestamp;
10-
import java.time.ZonedDateTime;
1112
import java.util.Collections;
1213
import java.util.Map;
1314
import java.util.function.Function;
@@ -100,11 +101,15 @@ public ValueConverters() {
100101
stringMapBuilder.put(Boolean.class, this::convertStringToBoolean);
101102
stringMapBuilder.put(String.class, this::convertStringToString);
102103
stringMapBuilder.put(byte[].class, this::convertStringToBytes);
104+
stringMapBuilder.put(URL.class, this::convertStringToURL);
103105
mapBuilder.put(String.class, stringMapBuilder.build());
104106

105-
mapBuilder.put(java.sql.Date.class, ImmutableMap.of(java.sql.Date.class, this::conveSqlDateToSqlDate));
106-
mapBuilder.put(Time.class, ImmutableMap.of(Time.class, this::conveSqlTimeToSqlTime));
107-
mapBuilder.put(Timestamp.class, ImmutableMap.of(Timestamp.class, this::conveSqlTimestampToSqlTimestamp));
107+
mapBuilder.put(java.sql.Date.class, ImmutableMap.of(java.sql.Date.class, this::conveSqlDateToSqlDate,
108+
String.class, this::convertDateToString));
109+
mapBuilder.put(Time.class, ImmutableMap.of(Time.class, this::conveSqlTimeToSqlTime,
110+
String.class, this::convertTimeToString));
111+
mapBuilder.put(Timestamp.class, ImmutableMap.of(Timestamp.class, this::conveSqlTimestampToSqlTimestamp,
112+
String.class, this::convertTimestampToString));
108113

109114
classConverters = mapBuilder.build();
110115
}
@@ -159,6 +164,14 @@ public double convertStringToDouble(Object value) {
159164
return Double.parseDouble((String) value);
160165
}
161166

167+
public URL convertStringToURL(Object value) {
168+
try {
169+
return new URL((String) value);
170+
} catch (MalformedURLException e) {
171+
throw new RuntimeException(e);
172+
}
173+
}
174+
162175
// Number to any
163176
public String convertNumberToString(Object value) {
164177
return String.valueOf(value);
@@ -201,26 +214,6 @@ public BigDecimal convertNumberToBigDecimal(Object value) {
201214
}
202215

203216
// Date & Time converters
204-
205-
public java.sql.Date convertZonedDateTimeToSqlDate(Object value) {
206-
// Date is stored without time zone information and should be treated as UTC
207-
ZonedDateTime zonedDateTime = (ZonedDateTime) value;
208-
Date date = Date.valueOf(zonedDateTime.toLocalDate());
209-
return date;
210-
}
211-
212-
public Time convertZonedDateTimeToSqlTime(Object value) {
213-
// Time is stored without time zone information and should be treated as UTC
214-
ZonedDateTime zonedDateTime = (ZonedDateTime) value;
215-
Time time = Time.valueOf(zonedDateTime.toLocalTime());
216-
return time;
217-
}
218-
219-
public Timestamp convertZonedDateTimeToSqlTimestamp(Object value) {
220-
ZonedDateTime zonedDateTime = (ZonedDateTime) value;
221-
return Timestamp.valueOf(zonedDateTime.toLocalDateTime());
222-
}
223-
224217
public java.sql.Date conveSqlDateToSqlDate(Object value) {
225218
return (java.sql.Date) value;
226219
}
@@ -233,6 +226,18 @@ public Timestamp conveSqlTimestampToSqlTimestamp(Object value) {
233226
return (Timestamp) value;
234227
}
235228

229+
public String convertDateToString(Object value) {
230+
return ((Date)value).toString();
231+
}
232+
233+
public String convertTimeToString(Object value) {
234+
return ((Time) value).toString();
235+
}
236+
237+
public String convertTimestampToString(Object value) {
238+
return ((Timestamp) value).toString();
239+
}
240+
236241
/**
237242
* Returns the converter map for the given source type.
238243
* Map contains target type and converter function. For example, if source type is boolean then map will contain all

jdbc-v2/src/main/java/com/clickhouse/jdbc/types/ArrayResultSet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ public Date getDate(int columnIndex, Calendar cal) throws SQLException {
871871
checkColumnIndex(columnIndex);
872872
checkRowPosition();
873873
throwUnsupportedIndexOperation(columnIndex, "getDate");
874-
return null;
874+
return getDate(columnIndex);
875875
}
876876

877877
@Override
@@ -884,7 +884,7 @@ public Time getTime(int columnIndex, Calendar cal) throws SQLException {
884884
checkColumnIndex(columnIndex);
885885
checkRowPosition();
886886
throwUnsupportedIndexOperation(columnIndex, "getTime");
887-
return null;
887+
return getTime(columnIndex);
888888
}
889889

890890
@Override

jdbc-v2/src/test/java/com/clickhouse/jdbc/types/ArrayResultSetTest.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.io.StringReader;
1111
import java.lang.reflect.Array;
1212
import java.math.BigDecimal;
13+
import java.net.URL;
1314
import java.sql.Blob;
1415
import java.sql.Clob;
1516
import java.sql.Date;
@@ -21,6 +22,7 @@
2122
import java.sql.Time;
2223
import java.sql.Timestamp;
2324
import java.sql.Types;
25+
import java.util.GregorianCalendar;
2426

2527
import static org.testng.Assert.assertEquals;
2628
import static org.testng.Assert.assertFalse;
@@ -427,6 +429,80 @@ void testIndexColumn() throws Exception {
427429
assertEquals(rs.getObject(indexColumn, Integer.class), 1);
428430
assertEquals(rs.getObject(indexColumn, Short.class), (short) 1);
429431
assertEquals(rs.getObject(indexColumn, Byte.class), (byte) 1);
432+
}
433+
434+
@Test
435+
void testDateColumn() throws Exception {
436+
Date[] array = {Date.valueOf("2020-01-01"), null, Date.valueOf("2020-01-02")};
437+
ArrayResultSet rs = new ArrayResultSet(array, ClickHouseColumn.parse("v Array(Date)").get(0));
438+
439+
final String dateColumn = rs.getMetaData().getColumnName(2);
440+
Assert.assertEquals(dateColumn, "VALUE");
441+
rs.next();
442+
assertEquals(rs.getObject(dateColumn), Date.valueOf("2020-01-01"));
443+
assertEquals(rs.getObject(dateColumn, String.class), "2020-01-01");
444+
assertEquals(rs.getDate(dateColumn), rs.getObject(dateColumn, Date.class));
445+
assertEquals(rs.getDate(dateColumn, new GregorianCalendar()), rs.getObject(dateColumn, Date.class));
446+
}
447+
448+
@Test
449+
void testTimeColumn() throws Exception {
450+
Time[] array = {Time.valueOf("12:34:56"), null, Time.valueOf("12:34:57")};
451+
ArrayResultSet rs = new ArrayResultSet(array, ClickHouseColumn.parse("v Array(Time)").get(0));
452+
453+
final String timeColumn = rs.getMetaData().getColumnName(2);
454+
Assert.assertEquals(timeColumn, "VALUE");
455+
rs.next();
456+
assertEquals(rs.getObject(timeColumn), Time.valueOf("12:34:56"));
457+
assertEquals(rs.getObject(timeColumn, String.class), "12:34:56");
458+
assertEquals(rs.getTime(timeColumn), rs.getObject(timeColumn, Time.class));
459+
assertEquals(rs.getTime(timeColumn, new GregorianCalendar()), rs.getObject(timeColumn, Time.class));
460+
}
461+
462+
@Test
463+
void testTimestampColumn() throws Exception {
464+
Timestamp[] array = {Timestamp.valueOf("2020-01-01 12:34:56.789123"), null, Timestamp.valueOf("2020-01-01 12:34:56.789124")};
465+
ArrayResultSet rs = new ArrayResultSet(array, ClickHouseColumn.parse("v Array(Timestamp)").get(0));
466+
467+
final String timestampColumn = rs.getMetaData().getColumnName(2);
468+
Assert.assertEquals(timestampColumn, "VALUE");
469+
rs.next();
470+
assertEquals(rs.getObject(timestampColumn), Timestamp.valueOf("2020-01-01 12:34:56.789123"));
471+
assertEquals(rs.getObject(timestampColumn, String.class), "2020-01-01 12:34:56.789123");
472+
assertEquals(rs.getTimestamp(timestampColumn), rs.getObject(timestampColumn, Timestamp.class));
473+
assertEquals(rs.getTimestamp(timestampColumn, new GregorianCalendar()), rs.getObject(timestampColumn, Timestamp.class));
474+
}
475+
476+
@Test
477+
void testStringColumn() throws Exception {
478+
String[] array = {"123", null, "456"};
479+
ArrayResultSet rs = new ArrayResultSet(array, ClickHouseColumn.parse("v Array(String)").get(0));
430480

481+
final String stringColumn = rs.getMetaData().getColumnName(2);
482+
Assert.assertEquals(stringColumn, "VALUE");
483+
rs.next();
484+
assertEquals(rs.getObject(stringColumn), "123");
485+
assertEquals(rs.getObject(stringColumn, String.class), "123");
486+
assertEquals(rs.getString(stringColumn), rs.getObject(stringColumn, String.class));
487+
assertEquals(rs.getByte(stringColumn), 123);
488+
assertEquals(rs.getShort(stringColumn), (short) 123);
489+
assertEquals(rs.getInt(stringColumn), 123);
490+
assertEquals(rs.getLong(stringColumn), 123L);
491+
assertEquals(rs.getFloat(stringColumn), 123.0f);
492+
assertEquals(rs.getDouble(stringColumn), 123.0);
493+
}
494+
495+
@Test
496+
void testStringToURL() throws Exception {
497+
String[] array = {"http://test.com", null, "https://test.com"};
498+
ArrayResultSet rs = new ArrayResultSet(array, ClickHouseColumn.parse("v Array(String)").get(0));
499+
500+
final String stringColumn = rs.getMetaData().getColumnName(2);
501+
Assert.assertEquals(stringColumn, "VALUE");
502+
rs.next();
503+
assertEquals(rs.getObject(stringColumn), "http://test.com");
504+
assertEquals(rs.getObject(stringColumn, String.class), "http://test.com");
505+
assertEquals(rs.getString(stringColumn), rs.getObject(stringColumn, String.class));
506+
assertEquals(rs.getURL(stringColumn), rs.getObject(stringColumn, URL.class));
431507
}
432508
}

0 commit comments

Comments
 (0)