11package com .clickhouse .client .api .internal ;
22
33import com .clickhouse .data .ClickHouseColumn ;
4- import com .clickhouse .data .ClickHouseDataType ;
54import org .testng .annotations .Test ;
65
6+ import java .time .LocalDate ;
7+ import java .time .LocalDateTime ;
8+ import java .time .LocalTime ;
9+ import java .time .ZoneId ;
10+ import java .time .ZonedDateTime ;
711import java .util .Arrays ;
812import java .util .Collections ;
13+ import java .util .Date ;
914
1015import static org .testng .Assert .assertEquals ;
16+ import static org .testng .Assert .assertNull ;
1117
1218@ Test (groups = {"unit" })
1319public class DataTypeConverterTest {
@@ -17,31 +23,107 @@ public void testArrayToString() {
1723 DataTypeConverter converter = new DataTypeConverter ();
1824
1925 ClickHouseColumn intColumn = ClickHouseColumn .of ("v" , "Array(Int32)" );
20- assertEquals (converter .arrayToString (new byte []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
21- assertEquals (converter .arrayToString (new short []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
22- assertEquals (converter .arrayToString (new int []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
23- assertEquals (converter .arrayToString (new long []{1L , 2L , 3L }, intColumn ), "[1, 2, 3]" );
24- assertEquals (converter .arrayToString (new float []{1.0f , 2.0f , 3.0f }, intColumn ), "[1.0, 2.0, 3.0]" );
25- assertEquals (converter .arrayToString (new double []{1.0d , 2.0d , 3.0d }, intColumn ), "[1.0, 2.0, 3.0]" );
26- assertEquals (converter .arrayToString (new boolean []{true , false , true }, intColumn ), "[true, false, true]" );
26+ assertEquals (converter .convertToString (new byte []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
27+ assertEquals (converter .convertToString (new short []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
28+ assertEquals (converter .convertToString (new int []{1 , 2 , 3 }, intColumn ), "[1, 2, 3]" );
29+ assertEquals (converter .convertToString (new long []{1L , 2L , 3L }, intColumn ), "[1, 2, 3]" );
30+ assertEquals (converter .convertToString (new float []{1.0f , 2.0f , 3.0f }, intColumn ), "[1.0, 2.0, 3.0]" );
31+ assertEquals (converter .convertToString (new double []{1.0d , 2.0d , 3.0d }, intColumn ), "[1.0, 2.0, 3.0]" );
32+ assertEquals (converter .convertToString (new boolean []{true , false , true }, intColumn ), "[true, false, true]" );
2733
2834
2935 ClickHouseColumn strColumn = ClickHouseColumn .of ("v" , "Array(String)" );
30- assertEquals (converter .arrayToString (new String [][]{{"a" , null }, {"b" , "c" }}, strColumn ), "[['a', NULL], ['b', 'c']]" );
31- assertEquals (converter .arrayToString (new int [][]{{1 , 2 }, {3 , 4 }}, intColumn ), "[[1, 2], [3, 4]]" );
32- assertEquals (converter .arrayToString (new int [][][]{{{1 , 2 }, {3 , 4 }}, {{5 , 6 }}}, intColumn ), "[[[1, 2], [3, 4]], [[5, 6]]]" );
33- assertEquals (converter .arrayToString (new char []{'a' , 'b' , 'c' }, strColumn ), "['a', 'b', 'c']" );
36+ assertEquals (converter .convertToString (new String [][]{{"a" , null }, {"b" , "c" }}, strColumn ), "[['a', NULL], ['b', 'c']]" );
37+ assertEquals (converter .convertToString (new int [][]{{1 , 2 }, {3 , 4 }}, intColumn ), "[[1, 2], [3, 4]]" );
38+ assertEquals (converter .convertToString (new int [][][]{{{1 , 2 }, {3 , 4 }}, {{5 , 6 }}}, intColumn ), "[[[1, 2], [3, 4]], [[5, 6]]]" );
39+ assertEquals (converter .convertToString (new char []{'a' , 'b' , 'c' }, strColumn ), "['a', 'b', 'c']" );
3440 }
3541
3642 @ Test
3743 public void testListToString () {
3844 DataTypeConverter converter = new DataTypeConverter ();
3945 ClickHouseColumn column = ClickHouseColumn .of ("field" , "Array(Int32)" );
40- assertEquals (converter .arrayToString (Collections .emptyList (), column ), "[]" );
41- assertEquals (converter .arrayToString (Arrays .asList (1 , 2 , 3 ), column ), "[1, 2, 3]" );
42- assertEquals (converter .arrayToString (Arrays .asList (1 , null , 3 ), column ), "[1, NULL, 3]" );
43- assertEquals (converter .arrayToString (Arrays .asList (Arrays .asList (1 , 2 ), Arrays .asList (3 , 4 )), column ), "[[1, 2], [3, 4]]" );
44- assertEquals (converter .arrayToString (Arrays .asList (Arrays .asList (Arrays .asList (1 , 2 ), Arrays .asList (3 , 4 )), Arrays .asList (Arrays .asList (5 , 6 ))), column ), "[[[1, 2], [3, 4]], [[5, 6]]]" );
45- assertEquals (converter .arrayToString (Arrays .asList (null , null , null ), column ), "[NULL, NULL, NULL]" );
46+ assertEquals (converter .convertToString (Collections .emptyList (), column ), "[]" );
47+ assertEquals (converter .convertToString (Arrays .asList (1 , 2 , 3 ), column ), "[1, 2, 3]" );
48+ assertEquals (converter .convertToString (Arrays .asList (1 , null , 3 ), column ), "[1, NULL, 3]" );
49+ assertEquals (converter .convertToString (Arrays .asList (Arrays .asList (1 , 2 ), Arrays .asList (3 , 4 )), column ), "[[1, 2], [3, 4]]" );
50+ assertEquals (converter .convertToString (Arrays .asList (Arrays .asList (Arrays .asList (1 , 2 ), Arrays .asList (3 , 4 )), Arrays .asList (Arrays .asList (5 , 6 ))), column ), "[[[1, 2], [3, 4]], [[5, 6]]]" );
51+ assertEquals (converter .convertToString (Arrays .asList (null , null , null ), column ), "[NULL, NULL, NULL]" );
52+ }
53+
54+ @ Test
55+ public void testDateToString () {
56+ DataTypeConverter converter = new DataTypeConverter ();
57+ ClickHouseColumn column = ClickHouseColumn .of ("field" , "Date" );
58+ assertEquals (converter .convertToString (LocalDate .of (2022 , 1 , 1 ), column ), "2022-01-01" );
59+ assertEquals (converter .convertToString (LocalDate .of (2022 , 1 , 2 ), column ), "2022-01-02" );
60+ assertEquals (converter .convertToString (LocalDate .of (2022 , 1 , 3 ), column ), "2022-01-03" );
61+
62+ Date date = Date .from (ZonedDateTime .of (2022 , 1 , 4 , 12 , 34 , 56 , 0 , ZoneId .of ("Asia/Shanghai" )).toInstant ());
63+ assertEquals (converter .convertToString (date , column ), "2022-01-04" );
64+ Date sqlDate = java .sql .Date .valueOf ("2022-01-04" );
65+ assertEquals (converter .convertToString (sqlDate , column ), "2022-01-04" );
66+ java .sql .Time sqlTime = java .sql .Time .valueOf ("12:34:56" );
67+ assertEquals (converter .convertToString (sqlTime , column ), "1970-01-01" );
68+ }
69+
70+
71+ @ Test
72+ public void testTimeToString () {
73+ DataTypeConverter converter = new DataTypeConverter ();
74+ ClickHouseColumn column = ClickHouseColumn .of ("field" , "Time" );
75+ assertEquals (converter .timeToString (LocalTime .of (12 , 34 , 56 ), column ), "12:34:56" );
76+ assertEquals (converter .timeToString (LocalTime .of (23 , 59 , 59 ), column ), "23:59:59" );
77+ Date sqlDate = java .sql .Date .valueOf ("2022-01-04" );
78+ assertEquals (converter .convertToString (sqlDate , column ), "00:00:00" );
79+ Date date = Date .from (ZonedDateTime .of (2022 , 1 , 4 , 12 , 34 , 56 , 0 , ZoneId .of ("Asia/Shanghai" )).toInstant ());
80+ assertEquals (converter .convertToString (date , column ), "04:34:56" );
81+ java .sql .Time sqlTime = java .sql .Time .valueOf ("12:34:56" );
82+ assertEquals (converter .convertToString (sqlTime , column ), "20:34:56" );
83+ }
84+
85+
86+ @ Test
87+ public void testDateTimeToString () {
88+ DataTypeConverter converter = new DataTypeConverter ();
89+ ClickHouseColumn column = ClickHouseColumn .of ("field" , "DateTime" );
90+ assertEquals (converter .dateTimeToString (LocalDateTime .of (2022 , 1 , 1 , 12 , 34 , 56 ), column ), "2022-01-01 12:34:56" );
91+ assertEquals (converter .dateTimeToString (LocalDateTime .of (2022 , 1 , 2 , 23 , 59 , 59 ), column ), "2022-01-02 23:59:59" );
92+
93+ Date date = Date .from (ZonedDateTime .of (2022 , 1 , 4 , 12 , 34 , 56 , 0 , ZoneId .of ("Asia/Shanghai" )).toInstant ());
94+ assertEquals (converter .convertToString (date , column ), "2022-01-04 04:34:56" );
95+ Date sqlDate = java .sql .Date .valueOf ("2022-01-04" );
96+ assertEquals (converter .convertToString (sqlDate , column ), "1970-01-01 00:00:00" );
97+ java .sql .Time sqlTime = java .sql .Time .valueOf ("12:34:56" );
98+ assertEquals (converter .convertToString (sqlTime , column ), "1970-01-01 20:34:56" );
99+ }
100+
101+ @ Test
102+ public void testEnumToString () {
103+ DataTypeConverter converter = new DataTypeConverter ();
104+ ClickHouseColumn column = ClickHouseColumn .of ("field" , "Enum8('a' = 1, 'b' = 2)" );
105+ assertEquals (converter .convertToString ("a" , column ), "a" );
106+ assertNull (converter .convertToString (null , column ));
107+ assertEquals (converter .convertToString (1 , column ), "a" );
108+ assertEquals (converter .convertToString ("1234567" , column ), "1234567" );
109+
110+ column = ClickHouseColumn .of ("field" , "Enum8('a' = 1, 'b' = 2)" );
111+ assertEquals (converter .convertToString ("a" , column ), "a" );
112+ assertNull (converter .convertToString (null , column ));
113+ assertEquals (converter .convertToString (1 , column ), "a" );
114+ assertEquals (converter .convertToString ("1234567" , column ), "1234567" );
115+
116+ column = ClickHouseColumn .of ("field" , "Enum8('a' = 1, 'b' = 2)" );
117+ assertEquals (converter .convertToString ("a" , column ), "a" );
118+ assertNull (converter .convertToString (null , column ));
119+ assertEquals (converter .convertToString (2 , column ), "b" );
120+ assertEquals (converter .convertToString ("1234567" , column ), "1234567" );
121+
122+ column = ClickHouseColumn .of ("field" , "Variant(Enum8('a' = 1, 'b' = 2))" );
123+ assertEquals (converter .convertToString ("a" , column ), "a" );
124+ assertEquals (converter .convertToString (null , column ), null );
125+ assertEquals (converter .convertToString (1 , column ), "1" );
126+ assertEquals (converter .convertToString ("1234567" , column ), "1234567" );
127+ assertEquals (converter .convertToString (2 , column ), "2" );
46128 }
47129}
0 commit comments