in catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/utils/TypeUtils.java [210:270]
public static DataType visit(Type type) {
switch (type.name()) {
case BOOLEAN:
return DataTypes.BOOLEAN();
case BYTE:
return DataTypes.TINYINT();
case SHORT:
return DataTypes.SMALLINT();
case INTEGER:
return DataTypes.INT();
case LONG:
return DataTypes.BIGINT();
case FLOAT:
return DataTypes.FLOAT();
case DOUBLE:
return DataTypes.DOUBLE();
case DECIMAL:
Types.DecimalType decimalType = (Types.DecimalType) type;
return DataTypes.DECIMAL(decimalType.precision(), decimalType.scale());
case DATE:
return DataTypes.DATE();
case TIME:
return DataTypes.TIME();
case TIMESTAMP:
return ((Types.TimestampType) type).hasTimeZone()
? DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE()
: DataTypes.TIMESTAMP();
case STRING:
return DataTypes.STRING();
case VARCHAR:
return DataTypes.VARCHAR(((Types.VarCharType) type).length());
case FIXEDCHAR:
return DataTypes.CHAR(((Types.FixedCharType) type).length());
case FIXED:
Types.FixedType fixedType = (Types.FixedType) type;
return DataTypes.BINARY(fixedType.length());
case BINARY:
return DataTypes.VARBINARY(VarBinaryType.MAX_LENGTH);
case LIST:
Types.ListType listType = (Types.ListType) type;
return DataTypes.ARRAY(visit(listType.elementType()));
case MAP:
Types.MapType mapType = (Types.MapType) type;
return DataTypes.MAP(visit(mapType.keyType()), visit(mapType.valueType()));
case STRUCT:
RowType.Builder builder = RowType.builder();
Arrays.stream(((Types.StructType) type).fields())
.forEach(
field -> {
DataType dataType = GravitinoToPaimonTypeVisitor.visit(field.type());
DataType dataTypeWithNullable =
field.nullable() ? dataType.nullable() : dataType.notNull();
builder.field(field.name(), dataTypeWithNullable, field.comment());
});
return builder.build();
default:
throw new UnsupportedOperationException(
String.format(
"Paimon does not support Gravitino %s data type.", type.simpleString()));
}
}