in paimon-common/src/main/java/org/apache/paimon/data/BinaryWriter.java [162:226]
static ValueSetter createValueSetter(DataType elementType, Serializer<?> serializer) {
// ordered by type root definition
switch (elementType.getTypeRoot()) {
case CHAR:
case VARCHAR:
return (writer, pos, value) -> writer.writeString(pos, (BinaryString) value);
case BOOLEAN:
return (writer, pos, value) -> writer.writeBoolean(pos, (boolean) value);
case BINARY:
case VARBINARY:
return (writer, pos, value) -> writer.writeBinary(pos, (byte[]) value);
case DECIMAL:
final int decimalPrecision = getPrecision(elementType);
return (writer, pos, value) ->
writer.writeDecimal(pos, (Decimal) value, decimalPrecision);
case TINYINT:
return (writer, pos, value) -> writer.writeByte(pos, (byte) value);
case SMALLINT:
return (writer, pos, value) -> writer.writeShort(pos, (short) value);
case INTEGER:
case DATE:
case TIME_WITHOUT_TIME_ZONE:
return (writer, pos, value) -> writer.writeInt(pos, (int) value);
case BIGINT:
return (writer, pos, value) -> writer.writeLong(pos, (long) value);
case FLOAT:
return (writer, pos, value) -> writer.writeFloat(pos, (float) value);
case DOUBLE:
return (writer, pos, value) -> writer.writeDouble(pos, (double) value);
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
final int timestampPrecision = getPrecision(elementType);
return (writer, pos, value) ->
writer.writeTimestamp(pos, (Timestamp) value, timestampPrecision);
case ARRAY:
final Serializer<?> arraySerializer =
serializer == null ? InternalSerializers.create(elementType) : serializer;
return (writer, pos, value) ->
writer.writeArray(
pos,
(InternalArray) value,
(InternalArraySerializer) arraySerializer);
case MULTISET:
case MAP:
final Serializer<?> mapSerializer =
serializer == null ? InternalSerializers.create(elementType) : serializer;
return (writer, pos, value) ->
writer.writeMap(
pos, (InternalMap) value, (InternalMapSerializer) mapSerializer);
case ROW:
final Serializer<?> rowSerializer =
serializer == null ? InternalSerializers.create(elementType) : serializer;
return (writer, pos, value) ->
writer.writeRow(
pos, (InternalRow) value, (InternalRowSerializer) rowSerializer);
case VARIANT:
return (writer, pos, value) -> writer.writeVariant(pos, (Variant) value);
default:
String msg =
String.format(
"type %s not support in %s",
elementType.getTypeRoot().toString(), BinaryArray.class.getName());
throw new IllegalArgumentException(msg);
}
}