in flink-doris-connector/src/main/java/org/apache/doris/flink/deserialization/converter/DorisRowConverter.java [240:297]
public static SerializationConverter createExternalConverter(LogicalType type) {
switch (type.getTypeRoot()) {
case NULL:
return ((index, val) -> null);
case CHAR:
case VARCHAR:
return (index, val) -> val.getString(index).toString();
case BOOLEAN:
return (index, val) -> val.getBoolean(index);
case BINARY:
case VARBINARY:
return (index, val) -> val.getBinary(index);
case DECIMAL:
final int decimalPrecision = ((DecimalType) type).getPrecision();
final int decimalScale = ((DecimalType) type).getScale();
return (index, val) ->
val.getDecimal(index, decimalPrecision, decimalScale).toBigDecimal();
case TINYINT:
return (index, val) -> val.getByte(index);
case SMALLINT:
return (index, val) -> val.getShort(index);
case INTEGER:
case INTERVAL_YEAR_MONTH:
case INTERVAL_DAY_TIME:
return (index, val) -> val.getInt(index);
case BIGINT:
return (index, val) -> val.getLong(index);
case FLOAT:
return (index, val) -> val.getFloat(index);
case DOUBLE:
return (index, val) -> val.getDouble(index);
case DATE:
return (index, val) -> Date.valueOf(LocalDate.ofEpochDay(val.getInt(index)));
case TIMESTAMP_WITHOUT_TIME_ZONE:
final int timestampPrecision = ((TimestampType) type).getPrecision();
return (index, val) -> val.getTimestamp(index, timestampPrecision).toTimestamp();
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
final int localP = ((LocalZonedTimestampType) type).getPrecision();
return (index, val) -> val.getTimestamp(index, localP).toTimestamp();
case TIMESTAMP_WITH_TIME_ZONE:
final int zonedP = ((ZonedTimestampType) type).getPrecision();
return (index, val) -> val.getTimestamp(index, zonedP).toTimestamp();
case ARRAY:
return (index, val) -> convertArrayData(val.getArray(index), type);
case MAP:
return (index, val) -> writeValueAsString(convertMapData(val.getMap(index), type));
case ROW:
return (index, val) -> writeValueAsString(convertRowData(val, index, type));
case MULTISET:
case STRUCTURED_TYPE:
case DISTINCT_TYPE:
case RAW:
case SYMBOL:
case UNRESOLVED:
default:
throw new UnsupportedOperationException("Unsupported type:" + type);
}
}