|
15 | 15 | import com.clickhouse.client.api.DataTypeUtils; |
16 | 16 | import com.clickhouse.client.api.ServerException; |
17 | 17 | import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader; |
| 18 | +import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader; |
18 | 19 | import com.clickhouse.client.api.enums.Protocol; |
19 | 20 | import com.clickhouse.client.api.insert.InsertSettings; |
20 | 21 | import com.clickhouse.client.api.metadata.TableSchema; |
|
49 | 50 | import java.net.Inet4Address; |
50 | 51 | import java.net.Inet6Address; |
51 | 52 | import java.net.InetAddress; |
| 53 | +import java.nio.file.Files; |
52 | 54 | import java.time.LocalDate; |
53 | 55 | import java.time.LocalDateTime; |
54 | 56 | import java.time.ZoneId; |
|
64 | 66 | import java.util.Random; |
65 | 67 | import java.util.Set; |
66 | 68 | import java.util.UUID; |
| 69 | +import java.util.concurrent.CompletableFuture; |
67 | 70 | import java.util.concurrent.CountDownLatch; |
68 | 71 | import java.util.concurrent.ExecutionException; |
69 | 72 | import java.util.concurrent.ExecutorService; |
@@ -982,6 +985,40 @@ public void testDecimalDataTypes() { |
982 | 985 | testDataTypes(columns, valueGenerators, verifiers); |
983 | 986 | } |
984 | 987 |
|
| 988 | + |
| 989 | + @Test(groups = {"integration"}) |
| 990 | + public void testArrayTuples() { |
| 991 | + final List<String> columns = Arrays.asList( |
| 992 | + "col1 Array(Tuple(UInt32, String))", |
| 993 | + "col2 Array(Tuple(UInt32, String, Float32))", |
| 994 | + "col3 Array(Tuple(UInt32, Tuple(Float32, String)))" |
| 995 | + ); |
| 996 | + |
| 997 | + final List<Supplier<String>> valueGenerators = Arrays.asList( |
| 998 | + () -> "[(1, 'value1'), (2, 'value2')]", |
| 999 | + () -> "[(1, 'value2', 23.43), (2, 'value3', 43.21)]", |
| 1000 | + () -> "[(1, (23.43, 'value3')), (2, (43.21, 'value4'))]" |
| 1001 | + ); |
| 1002 | + |
| 1003 | + final List<Consumer<ClickHouseBinaryFormatReader>> verifiers = new ArrayList<>(); |
| 1004 | + verifiers.add(r -> { |
| 1005 | + Assert.assertTrue(r.hasValue("col1"), "No value for column col1 found"); |
| 1006 | + Assert.assertEquals(r.getList("col1").get(0), new Object[]{1L, "value1"}); |
| 1007 | + Assert.assertEquals(r.getList("col1").get(1), new Object[]{2L, "value2"}); |
| 1008 | + }); |
| 1009 | + verifiers.add(r -> { |
| 1010 | + Assert.assertTrue(r.hasValue("col2"), "No value for column col2 found"); |
| 1011 | + Assert.assertEquals(r.getList("col2").get(0), new Object[]{1L, "value2", 23.43f}); |
| 1012 | + Assert.assertEquals(r.getList("col2").get(1), new Object[]{2L, "value3", 43.21f}); |
| 1013 | + }); |
| 1014 | + verifiers.add(r -> { |
| 1015 | + Assert.assertTrue(r.hasValue("col3"), "No value for column col2 found"); |
| 1016 | + Assert.assertEquals(r.getList("col3").get(0), new Object[]{1L, new Object[]{23.43f, "value3"}}); |
| 1017 | + Assert.assertEquals(r.getList("col3").get(1), new Object[]{2L, new Object[]{43.21f, "value4"}}); |
| 1018 | + }); |
| 1019 | + |
| 1020 | + testDataTypes(columns, valueGenerators, verifiers); |
| 1021 | + } |
985 | 1022 | @Test(groups = {"integration"}) |
986 | 1023 | public void testTuples() { |
987 | 1024 | final List<String> columns = Arrays.asList( |
|
0 commit comments