in flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/utils/TypeUtils.java [41:120]
public static Type toGravitinoType(LogicalType logicalType) {
switch (logicalType.getTypeRoot()) {
case VARCHAR:
return Types.StringType.get();
case DOUBLE:
return Types.DoubleType.get();
case INTEGER:
return Types.IntegerType.get();
case BIGINT:
return Types.LongType.get();
case CHAR:
CharType charType = (CharType) logicalType;
return Types.FixedCharType.of(charType.getLength());
case BOOLEAN:
return Types.BooleanType.get();
case BINARY:
BinaryType binaryType = (BinaryType) logicalType;
return Types.FixedType.of(binaryType.getLength());
case VARBINARY:
return Types.BinaryType.get();
case DECIMAL:
DecimalType decimalType = (DecimalType) logicalType;
return Types.DecimalType.of(decimalType.getPrecision(), decimalType.getScale());
case TINYINT:
return Types.ByteType.get();
case SMALLINT:
return Types.ShortType.get();
case DATE:
return Types.DateType.get();
case TIME_WITHOUT_TIME_ZONE:
return Types.TimeType.get();
case TIMESTAMP_WITHOUT_TIME_ZONE:
return Types.TimestampType.withoutTimeZone();
case INTERVAL_YEAR_MONTH:
return Types.IntervalYearType.get();
case INTERVAL_DAY_TIME:
return Types.IntervalDayType.get();
case FLOAT:
return Types.FloatType.get();
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
case TIMESTAMP_WITH_TIME_ZONE:
return Types.TimestampType.withTimeZone();
case ARRAY:
ArrayType arrayType = (ArrayType) logicalType;
Type elementType = toGravitinoType(arrayType.getElementType());
return Types.ListType.of(elementType, arrayType.isNullable());
case MAP:
MapType mapType = (MapType) logicalType;
Type keyType = toGravitinoType(mapType.getKeyType());
Type valueType = toGravitinoType(mapType.getValueType());
return Types.MapType.of(keyType, valueType, mapType.isNullable());
case ROW:
RowType rowType = (RowType) logicalType;
Types.StructType.Field[] fields =
rowType.getFields().stream()
.map(
field -> {
LogicalType fieldLogicalType = field.getType();
Type fieldType = toGravitinoType(fieldLogicalType);
return Types.StructType.Field.of(
field.getName(),
fieldType,
fieldLogicalType.isNullable(),
field.getDescription().orElse(null));
})
.toArray(Types.StructType.Field[]::new);
return Types.StructType.of(fields);
case NULL:
return Types.NullType.get();
case MULTISET:
case STRUCTURED_TYPE:
case UNRESOLVED:
case DISTINCT_TYPE:
case RAW:
case SYMBOL:
default:
throw new UnsupportedOperationException(
"Not support type: " + logicalType.asSummaryString());
}
}