Skip to content

Commit 54cb400

Browse files
authored
Merge pull request #1889 from Am-phi/clientv2_illegalArgumentException_for_tuple_in_array
[Client v2] illegal argument exception for tuple in array
2 parents 077dfa8 + 09177c8 commit 54cb400

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,8 @@ public static class ArrayValue {
559559
try {
560560
if (itemType.isArray()) {
561561
array = Array.newInstance(ArrayValue.class, length);
562+
} else if (itemType == List.class) {
563+
array = Array.newInstance(Object[].class, length);
562564
} else {
563565
array = Array.newInstance(itemType, length);
564566
}

client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.clickhouse.client.api.DataTypeUtils;
1616
import com.clickhouse.client.api.ServerException;
1717
import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader;
18+
import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader;
1819
import com.clickhouse.client.api.enums.Protocol;
1920
import com.clickhouse.client.api.insert.InsertSettings;
2021
import com.clickhouse.client.api.metadata.TableSchema;
@@ -49,6 +50,7 @@
4950
import java.net.Inet4Address;
5051
import java.net.Inet6Address;
5152
import java.net.InetAddress;
53+
import java.nio.file.Files;
5254
import java.time.LocalDate;
5355
import java.time.LocalDateTime;
5456
import java.time.ZoneId;
@@ -64,6 +66,7 @@
6466
import java.util.Random;
6567
import java.util.Set;
6668
import java.util.UUID;
69+
import java.util.concurrent.CompletableFuture;
6770
import java.util.concurrent.CountDownLatch;
6871
import java.util.concurrent.ExecutionException;
6972
import java.util.concurrent.ExecutorService;
@@ -982,6 +985,40 @@ public void testDecimalDataTypes() {
982985
testDataTypes(columns, valueGenerators, verifiers);
983986
}
984987

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+
}
9851022
@Test(groups = {"integration"})
9861023
public void testTuples() {
9871024
final List<String> columns = Arrays.asList(

0 commit comments

Comments
 (0)