Skip to content

Commit 866e6ef

Browse files
committed
done a little optimization
1 parent d70d5b7 commit 866e6ef

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

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

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -335,21 +335,24 @@ public String getString(String colName) {
335335

336336
@Override
337337
public String getString(int index) {
338-
return getString(schema.columnIndexToName(index));
338+
return dataTypeConverter.convertToString(readValue(index), schema.getColumnByIndex(index));
339339
}
340340

341341
private <T> T readNumberValue(String colName, NumberConverter.NumberType targetType) {
342-
int colIndex = schema.nameToIndex(colName);
343-
Function<Object, Object> converter = (Function<Object, Object>) convertions[colIndex].get(targetType);
342+
return readNumberValue(schema.nameToColumnIndex(colName), targetType);
343+
}
344+
345+
private <T> T readNumberValue(int colIndex, NumberConverter.NumberType targetType) {
346+
Function<Object, Object> converter = (Function<Object, Object>) convertions[colIndex - 1].get(targetType);
344347
if (converter != null) {
345-
Object value = readValue(colName);
346-
if (value == null) {
347-
throw new NullValueException("Column " + colName + " has null value and it cannot be cast to " +
348-
targetType.getTypeName());
348+
Object value = readValue(colIndex);
349+
if (value != null) {
350+
return (T) converter.apply(value);
349351
}
350-
return (T) converter.apply(value);
352+
throw new NullValueException("Column with index " + colIndex + " has null value and it cannot be cast to " +
353+
targetType.getTypeName());
351354
} else {
352-
throw new ClientException("Column " + colName + " " + columns[colIndex].getDataType().name() +
355+
throw new ClientException("Column with index " + colIndex + " " + columns[colIndex -1].getDataType().name() +
353356
" cannot be converted to " + targetType.getTypeName());
354357
}
355358
}
@@ -626,47 +629,47 @@ public boolean hasValue(String colName) {
626629

627630
@Override
628631
public byte getByte(int index) {
629-
return getByte(schema.columnIndexToName(index));
632+
return readNumberValue(index, NumberConverter.NumberType.Byte);
630633
}
631634

632635
@Override
633636
public short getShort(int index) {
634-
return getShort(schema.columnIndexToName(index));
637+
return readNumberValue(index, NumberConverter.NumberType.Short);
635638
}
636639

637640
@Override
638641
public int getInteger(int index) {
639-
return getInteger(schema.columnIndexToName(index));
642+
return readNumberValue(index, NumberConverter.NumberType.Int);
640643
}
641644

642645
@Override
643646
public long getLong(int index) {
644-
return getLong(schema.columnIndexToName(index));
647+
return readNumberValue(index, NumberConverter.NumberType.Long);
645648
}
646649

647650
@Override
648651
public float getFloat(int index) {
649-
return getFloat(schema.columnIndexToName(index));
652+
return readNumberValue(index, NumberConverter.NumberType.Float);
650653
}
651654

652655
@Override
653656
public double getDouble(int index) {
654-
return getDouble(schema.columnIndexToName(index));
657+
return readNumberValue(index, NumberConverter.NumberType.Double);
655658
}
656659

657660
@Override
658661
public boolean getBoolean(int index) {
659-
return getBoolean(schema.columnIndexToName(index));
662+
return readNumberValue(index, NumberConverter.NumberType.Boolean);
660663
}
661664

662665
@Override
663666
public BigInteger getBigInteger(int index) {
664-
return getBigInteger(schema.columnIndexToName(index));
667+
return readNumberValue(index, NumberConverter.NumberType.BigInteger);
665668
}
666669

667670
@Override
668671
public BigDecimal getBigDecimal(int index) {
669-
return getBigDecimal(schema.columnIndexToName(index));
672+
return readNumberValue(index, NumberConverter.NumberType.BigDecimal);
670673
}
671674

672675
@Override

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.clickhouse.client.api.data_formats.internal;
22

3+
import com.google.common.collect.ImmutableMap;
4+
35
import java.math.BigDecimal;
46
import java.math.BigInteger;
57
import java.util.Collections;
@@ -164,6 +166,6 @@ public static BigDecimal toBigDecimal(Object value) {
164166
converters.put(NumberType.Float, NumberConverter::toFloat);
165167
converters.put(NumberType.Double, NumberConverter::toDouble);
166168
converters.put(NumberType.Boolean, SerializerUtils::convertToBoolean);
167-
return Collections.unmodifiableMap(converters);
169+
return ImmutableMap.copyOf(converters);
168170
}
169171
}

0 commit comments

Comments
 (0)