diff --git a/clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseSimpleRecord.java b/clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseSimpleRecord.java index 918da509d..041d505e6 100644 --- a/clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseSimpleRecord.java +++ b/clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseSimpleRecord.java @@ -1,7 +1,9 @@ package com.clickhouse.data; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Default implementation of {@link com.clickhouse.data.ClickHouseRecord}, @@ -13,6 +15,7 @@ public class ClickHouseSimpleRecord implements ClickHouseRecord { private final List columns; private ClickHouseValue[] values; + private Map columnsIndexes = null; /** * Creates a record object to wrap given values. @@ -83,19 +86,25 @@ public ClickHouseValue getValue(int index) { @Override public ClickHouseValue getValue(String name) { + if(columnsIndexes == null) + columnsIndexes = new HashMap<>(columns.size()); + + return getValue(columnsIndexes.computeIfAbsent(name, this::computeColumnIndex)); + } + + @Override + public int size() { + return values.length; + } + + private int computeColumnIndex(String name) { int index = 0; for (ClickHouseColumn c : columns) { if (c.getColumnName().equalsIgnoreCase(name)) { - return getValue(index); + return index; } index++; } - throw new IllegalArgumentException(ClickHouseUtils.format("Unable to find column [%s]", name)); } - - @Override - public int size() { - return values.length; - } }