in src/main/java/org/apache/paimon/trino/TrinoPageSource.java [199:258]
protected void appendTo(Type type, DataType logicalType, Object value, BlockBuilder output) {
if (value == null) {
output.appendNull();
return;
}
Class<?> javaType = type.getJavaType();
if (javaType == boolean.class) {
type.writeBoolean(output, (Boolean) value);
} else if (javaType == long.class) {
if (type.equals(BIGINT)
|| type.equals(INTEGER)
|| type.equals(TINYINT)
|| type.equals(SMALLINT)
|| type.equals(DATE)) {
type.writeLong(output, ((Number) value).longValue());
} else if (type.equals(REAL)) {
type.writeLong(output, Float.floatToIntBits((Float) value));
} else if (type instanceof DecimalType) {
DecimalType decimalType = (DecimalType) type;
BigDecimal decimal = ((Decimal) value).toBigDecimal();
type.writeLong(output, encodeShortScaledValue(decimal, decimalType.getScale()));
} else if (type.equals(TIMESTAMP_MILLIS) || type.equals(TIMESTAMP_SECONDS)) {
type.writeLong(
output,
((Timestamp) value).getMillisecond() * MICROSECONDS_PER_MILLISECOND);
} else if (type.equals(TIMESTAMP_MICROS)) {
type.writeLong(output, ((Timestamp) value).toMicros());
} else if (type.equals(TIMESTAMP_TZ_MILLIS)) {
type.writeLong(
output,
packDateTimeWithZone(((Timestamp) value).getMillisecond(), UTC_KEY));
} else if (type.equals(TIME_MICROS)) {
type.writeLong(output, (int) value * MICROSECONDS_PER_MILLISECOND);
} else {
throw new TrinoException(
GENERIC_INTERNAL_ERROR,
format("Unhandled type for %s: %s", javaType.getSimpleName(), type));
}
} else if (javaType == double.class) {
type.writeDouble(output, ((Number) value).doubleValue());
} else if (type instanceof DecimalType) {
writeObject(output, type, value);
} else if (javaType == Slice.class) {
writeSlice(output, type, value);
} else if (javaType == LongTimestampWithTimeZone.class) {
checkArgument(type.equals(TIMESTAMP_TZ_MILLIS));
Timestamp timestamp = (org.apache.paimon.data.Timestamp) value;
type.writeObject(
output, fromEpochMillisAndFraction(timestamp.getMillisecond(), 0, UTC_KEY));
} else if (type instanceof ArrayType
|| type instanceof MapType
|| type instanceof RowType) {
writeBlock(output, type, logicalType, value);
} else {
throw new TrinoException(
GENERIC_INTERNAL_ERROR,
format("Unhandled type for %s: %s", javaType.getSimpleName(), type));
}
}