in paimon-format/src/main/java/org/apache/paimon/format/parquet/reader/ArrayColumnReader.java [141:194]
private Object readPrimitiveTypedRow(DataType type) {
switch (type.getTypeRoot()) {
case CHAR:
case VARCHAR:
case BINARY:
case VARBINARY:
return dataColumn.readBytes();
case BOOLEAN:
return dataColumn.readBoolean();
case TIME_WITHOUT_TIME_ZONE:
case DATE:
case INTEGER:
return dataColumn.readInteger();
case TINYINT:
return dataColumn.readTinyInt();
case SMALLINT:
return dataColumn.readSmallInt();
case BIGINT:
return dataColumn.readLong();
case FLOAT:
return dataColumn.readFloat();
case DOUBLE:
return dataColumn.readDouble();
case DECIMAL:
switch (descriptor.getPrimitiveType().getPrimitiveTypeName()) {
case INT32:
return dataColumn.readInteger();
case INT64:
return dataColumn.readLong();
case BINARY:
case FIXED_LEN_BYTE_ARRAY:
return dataColumn.readBytes();
}
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
int precision;
if (type.getTypeRoot() == TIMESTAMP_WITHOUT_TIME_ZONE) {
precision = ((TimestampType) type).getPrecision();
} else {
precision = ((LocalZonedTimestampType) type).getPrecision();
}
if (precision <= 3) {
return dataColumn.readMillsTimestamp();
} else if (precision <= 6) {
return dataColumn.readMicrosTimestamp();
} else {
throw new RuntimeException(
"Unsupported precision of time type in the list: " + precision);
}
default:
throw new RuntimeException("Unsupported type in the list: " + type);
}
}