protected void readAndFill(ClickHouseValue value) throws IOException {
        int pos = readPosition;
        DefaultSerDe s = serde;
        ClickHouseValue v = s.deserializers[pos].deserialize(value, input);
        if (v != value) {
            s.templates[pos] = v;
        }
        if (++pos >= s.columns.length) {
            readPosition = 0;
        } else {
            readPosition = pos;
        }
    }
Reads next column(at {@code readPosition} from input stream and fill
deserialized data into the given value object. This method is mainly used
when iterating through {@link #values()}. In default implementation, it's
also used in {@link #readAndFill(ClickHouseRecord)} for simplicity.

@param value non-null value object to fill
@throws IOException when failed to read column from input stream
clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseDataProcessor.java