in c++/src/ConvertColumnReader.cc [1269:1586]
std::unique_ptr<ColumnReader> buildConvertReader(const Type& fileType, StripeStreams& stripe,
bool useTightNumericVector,
bool throwOnOverflow) {
if (!useTightNumericVector) {
throw SchemaEvolutionError(
"SchemaEvolution only support tight vector, please create ColumnVectorBatch with "
"option useTightNumericVector");
}
const auto& readType = *stripe.getSchemaEvolution()->getReadType(fileType);
switch (fileType.getKind()) {
case BOOLEAN: {
switch (readType.getKind()) {
CASE_CREATE_READER(BYTE, BooleanToByte)
CASE_CREATE_READER(SHORT, BooleanToShort)
CASE_CREATE_READER(INT, BooleanToInt)
CASE_CREATE_READER(LONG, BooleanToLong)
CASE_CREATE_READER(FLOAT, BooleanToFloat)
CASE_CREATE_READER(DOUBLE, BooleanToDouble)
CASE_CREATE_READER(STRING, BooleanToString)
CASE_CREATE_READER(CHAR, BooleanToChar)
CASE_CREATE_READER(VARCHAR, BooleanToVarchar)
CASE_CREATE_DECIMAL_READER(Boolean)
CASE_CREATE_READER(TIMESTAMP, BooleanToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, BooleanToTimestamp)
case BOOLEAN:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case BYTE: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, ByteToBoolean)
CASE_CREATE_READER(SHORT, ByteToShort)
CASE_CREATE_READER(INT, ByteToInt)
CASE_CREATE_READER(LONG, ByteToLong)
CASE_CREATE_READER(FLOAT, ByteToFloat)
CASE_CREATE_READER(DOUBLE, ByteToDouble)
CASE_CREATE_READER(STRING, ByteToString)
CASE_CREATE_READER(CHAR, ByteToChar)
CASE_CREATE_READER(VARCHAR, ByteToVarchar)
CASE_CREATE_DECIMAL_READER(Byte)
CASE_CREATE_READER(TIMESTAMP, ByteToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, ByteToTimestamp)
case BYTE:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case SHORT: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, ShortToBoolean)
CASE_CREATE_READER(BYTE, ShortToByte)
CASE_CREATE_READER(INT, ShortToInt)
CASE_CREATE_READER(LONG, ShortToLong)
CASE_CREATE_READER(FLOAT, ShortToFloat)
CASE_CREATE_READER(DOUBLE, ShortToDouble)
CASE_CREATE_READER(STRING, ShortToString)
CASE_CREATE_READER(CHAR, ShortToChar)
CASE_CREATE_READER(VARCHAR, ShortToVarchar)
CASE_CREATE_DECIMAL_READER(Short)
CASE_CREATE_READER(TIMESTAMP, ShortToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, ShortToTimestamp)
case SHORT:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case INT: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, IntToBoolean)
CASE_CREATE_READER(BYTE, IntToByte)
CASE_CREATE_READER(SHORT, IntToShort)
CASE_CREATE_READER(LONG, IntToLong)
CASE_CREATE_READER(FLOAT, IntToFloat)
CASE_CREATE_READER(DOUBLE, IntToDouble)
CASE_CREATE_READER(STRING, IntToString)
CASE_CREATE_READER(CHAR, IntToChar)
CASE_CREATE_READER(VARCHAR, IntToVarchar)
CASE_CREATE_DECIMAL_READER(Int)
CASE_CREATE_READER(TIMESTAMP, IntToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, IntToTimestamp)
case INT:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case LONG: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, LongToBoolean)
CASE_CREATE_READER(BYTE, LongToByte)
CASE_CREATE_READER(SHORT, LongToShort)
CASE_CREATE_READER(INT, LongToInt)
CASE_CREATE_READER(FLOAT, LongToFloat)
CASE_CREATE_READER(DOUBLE, LongToDouble)
CASE_CREATE_READER(STRING, LongToString)
CASE_CREATE_READER(CHAR, LongToChar)
CASE_CREATE_READER(VARCHAR, LongToVarchar)
CASE_CREATE_DECIMAL_READER(Long)
CASE_CREATE_READER(TIMESTAMP, LongToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, LongToTimestamp)
case LONG:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case FLOAT: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, FloatToBoolean)
CASE_CREATE_READER(BYTE, FloatToByte)
CASE_CREATE_READER(SHORT, FloatToShort)
CASE_CREATE_READER(INT, FloatToInt)
CASE_CREATE_READER(LONG, FloatToLong)
CASE_CREATE_READER(DOUBLE, FloatToDouble)
CASE_CREATE_READER(STRING, FloatToString)
CASE_CREATE_READER(CHAR, FloatToChar)
CASE_CREATE_READER(VARCHAR, FloatToVarchar)
CASE_CREATE_DECIMAL_READER(Float)
CASE_CREATE_READER(TIMESTAMP, FloatToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, FloatToTimestamp)
case FLOAT:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case DOUBLE: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, DoubleToBoolean)
CASE_CREATE_READER(BYTE, DoubleToByte)
CASE_CREATE_READER(SHORT, DoubleToShort)
CASE_CREATE_READER(INT, DoubleToInt)
CASE_CREATE_READER(LONG, DoubleToLong)
CASE_CREATE_READER(FLOAT, DoubleToFloat)
CASE_CREATE_READER(STRING, DoubleToString)
CASE_CREATE_READER(CHAR, DoubleToChar)
CASE_CREATE_READER(VARCHAR, DoubleToVarchar)
CASE_CREATE_DECIMAL_READER(Double)
CASE_CREATE_READER(TIMESTAMP, DoubleToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, DoubleToTimestamp)
case DOUBLE:
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case DECIMAL: {
switch (readType.getKind()) {
CASE_CREATE_FROM_DECIMAL_READER(BOOLEAN, Boolean)
CASE_CREATE_FROM_DECIMAL_READER(BYTE, Byte)
CASE_CREATE_FROM_DECIMAL_READER(SHORT, Short)
CASE_CREATE_FROM_DECIMAL_READER(INT, Int)
CASE_CREATE_FROM_DECIMAL_READER(LONG, Long)
CASE_CREATE_FROM_DECIMAL_READER(FLOAT, Float)
CASE_CREATE_FROM_DECIMAL_READER(DOUBLE, Double)
CASE_CREATE_FROM_DECIMAL_READER(STRING, String)
CASE_CREATE_FROM_DECIMAL_READER(CHAR, Char)
CASE_CREATE_FROM_DECIMAL_READER(VARCHAR, Varchar)
CASE_CREATE_FROM_DECIMAL_READER(TIMESTAMP, Timestamp)
CASE_CREATE_FROM_DECIMAL_READER(TIMESTAMP_INSTANT, Timestamp)
case DECIMAL: {
if (isDecimal64(fileType)) {
if (isDecimal64(readType)) {
CREATE_READER(Decimal64ToDecimal64ColumnReader)
} else {
CREATE_READER(Decimal64ToDecimal128ColumnReader)
}
} else {
if (isDecimal64(readType)) {
CREATE_READER(Decimal128ToDecimal64ColumnReader)
} else {
CREATE_READER(Decimal128ToDecimal128ColumnReader)
}
}
}
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case STRING: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, StringToBoolean)
CASE_CREATE_READER(BYTE, StringToByte)
CASE_CREATE_READER(SHORT, StringToShort)
CASE_CREATE_READER(INT, StringToInt)
CASE_CREATE_READER(LONG, StringToLong)
CASE_CREATE_READER(FLOAT, StringToFloat)
CASE_CREATE_READER(DOUBLE, StringToDouble)
CASE_CREATE_READER(STRING, StringToString)
CASE_CREATE_READER(CHAR, StringToChar)
CASE_CREATE_READER(VARCHAR, StringToVarchar)
CASE_CREATE_READER(TIMESTAMP, StringToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, StringToTimestamp)
case DECIMAL: {
if (isDecimal64(readType)) {
CREATE_READER(StringToDecimal64ColumnReader)
} else {
CREATE_READER(StringToDecimal128ColumnReader)
}
}
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case CHAR: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, CharToBoolean)
CASE_CREATE_READER(BYTE, CharToByte)
CASE_CREATE_READER(SHORT, CharToShort)
CASE_CREATE_READER(INT, CharToInt)
CASE_CREATE_READER(LONG, CharToLong)
CASE_CREATE_READER(FLOAT, CharToFloat)
CASE_CREATE_READER(DOUBLE, CharToDouble)
CASE_CREATE_READER(STRING, CharToString)
CASE_CREATE_READER(CHAR, CharToChar)
CASE_CREATE_READER(VARCHAR, CharToVarchar)
CASE_CREATE_READER(TIMESTAMP, CharToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, CharToTimestamp)
case DECIMAL: {
if (isDecimal64(readType)) {
CREATE_READER(CharToDecimal64ColumnReader)
} else {
CREATE_READER(CharToDecimal128ColumnReader)
}
}
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case VARCHAR: {
switch (readType.getKind()) {
CASE_CREATE_READER(BOOLEAN, VarcharToBoolean)
CASE_CREATE_READER(BYTE, VarcharToByte)
CASE_CREATE_READER(SHORT, VarcharToShort)
CASE_CREATE_READER(INT, VarcharToInt)
CASE_CREATE_READER(LONG, VarcharToLong)
CASE_CREATE_READER(FLOAT, VarcharToFloat)
CASE_CREATE_READER(DOUBLE, VarcharToDouble)
CASE_CREATE_READER(STRING, VarcharToString)
CASE_CREATE_READER(CHAR, VarcharToChar)
CASE_CREATE_READER(VARCHAR, VarcharToVarchar)
CASE_CREATE_READER(TIMESTAMP, VarcharToTimestamp)
CASE_CREATE_READER(TIMESTAMP_INSTANT, VarcharToTimestamp)
case DECIMAL: {
if (isDecimal64(readType)) {
CREATE_READER(VarcharToDecimal64ColumnReader)
} else {
CREATE_READER(VarcharToDecimal128ColumnReader)
}
}
case BINARY:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
CASE_EXCEPTION
}
}
case BINARY:
case TIMESTAMP:
case LIST:
case MAP:
case STRUCT:
case UNION:
case DATE:
case TIMESTAMP_INSTANT:
CASE_EXCEPTION
}
}