static AvroToRowDataConverter createConverter()

in paimon-format/src/main/java/org/apache/paimon/format/avro/AvroToRowDataConverters.java [104:156]


    static AvroToRowDataConverter createConverter(DataType type) {
        switch (type.getTypeRoot()) {
            case TINYINT:
                return avroObject -> ((Integer) avroObject).byteValue();
            case SMALLINT:
                return avroObject -> ((Integer) avroObject).shortValue();
            case BOOLEAN: // boolean
            case INTEGER: // int
            case BIGINT: // long
            case FLOAT: // float
            case DOUBLE: // double
                return avroObject -> avroObject;
            case DATE:
                return AvroToRowDataConverters::convertToDate;
            case TIME_WITHOUT_TIME_ZONE:
                return AvroToRowDataConverters::convertToTime;
            case TIMESTAMP_WITHOUT_TIME_ZONE:
                int precision = ((TimestampType) type).getPrecision();
                if (precision <= 3) {
                    return AvroToRowDataConverters::convertToTimestampFromMillis;
                } else if (precision <= 6) {
                    return AvroToRowDataConverters::convertToTimestampFromMicros;
                } else {
                    throw new UnsupportedOperationException("Unsupported precision: " + precision);
                }
            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
                precision = ((LocalZonedTimestampType) type).getPrecision();
                if (precision <= 3) {
                    return AvroToRowDataConverters::convertToTimestampFromMillis;
                } else if (precision <= 6) {
                    return AvroToRowDataConverters::convertToTimestampFromMicros;
                } else {
                    throw new UnsupportedOperationException("Unsupported precision: " + precision);
                }
            case CHAR:
            case VARCHAR:
                return avroObject -> BinaryString.fromString(avroObject.toString());
            case BINARY:
            case VARBINARY:
                return AvroToRowDataConverters::convertToBytes;
            case DECIMAL:
                return createDecimalConverter((DecimalType) type);
            case ARRAY:
                return createArrayConverter((ArrayType) type);
            case ROW:
                return createRowConverter((RowType) type);
            case MAP:
            case MULTISET:
                return createMapConverter(type);
            default:
                throw new UnsupportedOperationException("Unsupported type: " + type);
        }
    }