Skip to content

Commit 8b6226a

Browse files
authored
Merge pull request #2128 from Am-phi/fix/#2127
[client-v2] Fix support in ClickHouseBinaryFormatReader for SimpleAggregateValue
2 parents 062b82f + 11b67b8 commit 8b6226a

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,11 @@ protected void setSchema(TableSchema schema) {
222222

223223
for (int i = 0; i < columns.length; i++) {
224224
ClickHouseColumn column = columns[i];
225-
226-
switch (column.getDataType()) {
225+
ClickHouseDataType columnDataType = column.getDataType();
226+
if (columnDataType.equals(ClickHouseDataType.SimpleAggregateFunction)){
227+
columnDataType = column.getNestedColumns().get(0).getDataType();
228+
}
229+
switch (columnDataType) {
227230
case Int8:
228231
case Int16:
229232
case UInt8:
@@ -378,7 +381,11 @@ public BigDecimal getBigDecimal(String colName) {
378381
public Instant getInstant(String colName) {
379382
int colIndex = schema.nameToIndex(colName);
380383
ClickHouseColumn column = schema.getColumns().get(colIndex);
381-
switch (column.getDataType()) {
384+
ClickHouseDataType columnDataType = column.getDataType();
385+
if (columnDataType.equals(ClickHouseDataType.SimpleAggregateFunction)){
386+
columnDataType = column.getNestedColumns().get(0).getDataType();
387+
}
388+
switch (columnDataType) {
382389
case Date:
383390
case Date32:
384391
LocalDate data = readValue(colName);
@@ -402,7 +409,11 @@ public Instant getInstant(String colName) {
402409
public ZonedDateTime getZonedDateTime(String colName) {
403410
int colIndex = schema.nameToIndex(colName);
404411
ClickHouseColumn column = schema.getColumns().get(colIndex);
405-
switch (column.getDataType()) {
412+
ClickHouseDataType columnDataType = column.getDataType();
413+
if (columnDataType.equals(ClickHouseDataType.SimpleAggregateFunction)){
414+
columnDataType = column.getNestedColumns().get(0).getDataType();
415+
}
416+
switch (columnDataType) {
406417
case DateTime:
407418
case DateTime64:
408419
case Date:

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,6 +1985,31 @@ public void testReadingSimpleAggregateFunction() throws Exception {
19851985
}
19861986
}
19871987

1988+
@Test(groups = {"integration"})
1989+
public void testReadingSimpleAggregateFunction2() throws Exception {
1990+
final String tableName = "simple_aggregate_function_test_table";
1991+
client.execute("DROP TABLE IF EXISTS " + tableName).get();
1992+
client.execute("CREATE TABLE `" + tableName + "` " +
1993+
"(idx UInt8, lowest_value SimpleAggregateFunction(min, UInt8), count SimpleAggregateFunction(sum, Int64), date SimpleAggregateFunction(anyLast, DateTime32)) " +
1994+
"ENGINE Memory;").get();
1995+
1996+
1997+
try (InsertResponse response = client.insert(tableName, new ByteArrayInputStream("1\t2\t3\t2024-12-22T12:00:00".getBytes(StandardCharsets.UTF_8)), ClickHouseFormat.TSV).get(30, TimeUnit.SECONDS)) {
1998+
Assert.assertEquals(response.getWrittenRows(), 1);
1999+
}
2000+
2001+
try (QueryResponse queryResponse = client.query("SELECT * FROM " + tableName + " LIMIT 1").get(30, TimeUnit.SECONDS)) {
2002+
2003+
ClickHouseBinaryFormatReader reader = client.newBinaryFormatReader(queryResponse);
2004+
Assert.assertNotNull(reader.next());
2005+
Assert.assertEquals(reader.getByte("idx"), Byte.valueOf("1"));
2006+
Assert.assertEquals((Short) reader.getShort("lowest_value"), Short.parseShort("2"));
2007+
Assert.assertEquals((Long) reader.getLong("count"), Long.parseLong("3"));
2008+
Assert.assertEquals(reader.getLocalDateTime("date"), LocalDateTime.of(2024,12,22,12,00,00));
2009+
Assert.assertFalse(reader.hasNext());
2010+
}
2011+
}
2012+
19882013
@Test(groups = {"integration"})
19892014
public void testReadingEnumsAsStrings() throws Exception {
19902015
final String tableName = "enums_as_strings_test_table";

0 commit comments

Comments
 (0)