private void appendTo()

in paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceBase.java [156:207]


    private 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.writeLong(
                        output,
                        ((Timestamp) value).getMillisecond() * MICROSECONDS_PER_MILLISECOND);
            } 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 (javaType == Block.class) {
            writeBlock(output, type, logicalType, value);
        } else {
            throw new TrinoException(
                    GENERIC_INTERNAL_ERROR,
                    format("Unhandled type for %s: %s", javaType.getSimpleName(), type));
        }
    }