Skip to content

Commit 3677ea7

Browse files
committed
fixes problem with duplicate column names by leaving last one index in the column index lookup by name map
1 parent d70d5b7 commit 3677ea7

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

client-v2/src/main/java/com/clickhouse/client/api/metadata/TableSchema.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ public TableSchema(String tableName, String query, String databaseName, Collecti
3232
this.columns = ImmutableList.copyOf(columns);
3333
ImmutableMap.Builder<String, Integer> colIndexMapBuilder = ImmutableMap.builder();
3434
for (int i = 0; i < this.columns.size(); i++) {
35-
ClickHouseColumn column= this.columns.get(i);
35+
ClickHouseColumn column = this.columns.get(i);
3636
if (column.hasDefault()) {
3737
this.hasDefaults = true;
3838
}
3939
colIndexMapBuilder.put(this.columns.get(i).getColumnName(), i);
4040
}
41-
this.colIndex = colIndexMapBuilder.build();
41+
this.colIndex = colIndexMapBuilder.buildKeepingLast();
4242
}
4343

4444
/**

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,4 +2215,32 @@ public void testSettingsNotChanged() throws Exception{
22152215
Assert.assertEquals(response.getFormat(), ClickHouseFormat.JSONEachRow);
22162216
}
22172217
}
2218+
2219+
@Test
2220+
public void testDuplicateColumnNames() throws Exception {
2221+
{
2222+
// simple scenario
2223+
List<GenericRecord> records = client.queryAll("SELECT 'a', 'a'");
2224+
GenericRecord record = records.get(0);
2225+
Assert.assertEquals(record.getString("'a'"), "a");
2226+
Assert.assertEquals(record.getString(1), "a");
2227+
Assert.assertEquals(record.getString(2), "a");
2228+
}
2229+
2230+
{
2231+
client.execute("DROP TABLE IF EXISTS test_duplicate_column_names_1").get().close();
2232+
client.execute("DROP TABLE IF EXISTS test_duplicate_column_names_2").get().close();
2233+
client.execute("CREATE TABLE test_duplicate_column_names1 (name String ) ENGINE = MergeTree ORDER BY ()").get().close();
2234+
client.execute("INSERT INTO test_duplicate_column_names1 VALUES ('some name')").get().close();
2235+
client.execute("CREATE TABLE test_duplicate_column_names2 (name String ) ENGINE = MergeTree ORDER BY ()").get().close();
2236+
client.execute("INSERT INTO test_duplicate_column_names2 VALUES ('another name')").get().close();
2237+
2238+
List<GenericRecord> records = client.queryAll("SELECT * FROM test_duplicate_column_names1, test_duplicate_column_names2");
2239+
GenericRecord record = records.get(0);
2240+
Assert.assertEquals(record.getString("name"), "some name");
2241+
Assert.assertEquals(record.getString("test_duplicate_column_names2.name"), "another name");
2242+
Assert.assertEquals(record.getString(1), "some name");
2243+
Assert.assertEquals(record.getString(2), "another name");
2244+
}
2245+
}
22182246
}

0 commit comments

Comments
 (0)