From ad51a680ed492557f5eaccb76c3a53ffc1fa9a73 Mon Sep 17 00:00:00 2001 From: Max Justus Spransy Date: Thu, 23 Oct 2025 16:26:25 -0700 Subject: [PATCH] fix: allow duplicate column names in query responses Fixes client throwing errors like `Multiple entries with same key: number=1 and number=0` For queries with duplicate column names. IE: `select number, * from system.numbers limit 1;` --- .../clickhouse/client/api/metadata/TableSchema.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java b/client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java index ef41832de..921b8c0bb 100644 --- a/client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java +++ b/client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java @@ -2,9 +2,9 @@ import com.clickhouse.data.ClickHouseColumn; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,15 +30,17 @@ public TableSchema(String tableName, String query, String databaseName, Collecti this.databaseName = databaseName; this.query = query; this.columns = ImmutableList.copyOf(columns); - ImmutableMap.Builder colIndexMapBuilder = ImmutableMap.builder(); + Map colIndexMapBuilder = new HashMap<>(); for (int i = 0; i < this.columns.size(); i++) { ClickHouseColumn column= this.columns.get(i); if (column.hasDefault()) { this.hasDefaults = true; } - colIndexMapBuilder.put(this.columns.get(i).getColumnName(), i); + String columnName = column.getColumnName(); + // if a column is duplicated, the last one wins + colIndexMapBuilder.put(columnName, i); } - this.colIndex = colIndexMapBuilder.build(); + this.colIndex = colIndexMapBuilder; } /**