in fluss-common/src/main/java/com/alibaba/fluss/utils/json/DataTypeJsonSerde.java [210:258]
private static DataType deserializeFromRoot(JsonNode dataTypeNode) {
final DataTypeRoot typeRoot =
DataTypeRoot.valueOf(dataTypeNode.get(FIELD_NAME_TYPE_NAME).asText());
switch (typeRoot) {
case BOOLEAN:
return DataTypes.BOOLEAN();
case TINYINT:
return DataTypes.TINYINT();
case SMALLINT:
return DataTypes.SMALLINT();
case INTEGER:
return DataTypes.INT();
case BIGINT:
return DataTypes.BIGINT();
case FLOAT:
return DataTypes.FLOAT();
case DOUBLE:
return DataTypes.DOUBLE();
case DATE:
return DataTypes.DATE();
case TIME_WITHOUT_TIME_ZONE:
return DataTypes.TIME(dataTypeNode.get(FIELD_NAME_PRECISION).asInt());
case STRING:
return DataTypes.STRING();
case BYTES:
return DataTypes.BYTES();
case BINARY:
final int binaryLength = dataTypeNode.get(FIELD_NAME_LENGTH).asInt();
return DataTypes.BINARY(binaryLength);
case CHAR:
final int charLength = dataTypeNode.get(FIELD_NAME_LENGTH).asInt();
return DataTypes.CHAR(charLength);
case DECIMAL:
return DataTypes.DECIMAL(
dataTypeNode.get(FIELD_NAME_PRECISION).asInt(),
dataTypeNode.get(FILED_NAME_SCALE).asInt());
case TIMESTAMP_WITHOUT_TIME_ZONE:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return deserializeTimestamp(typeRoot, dataTypeNode);
case ARRAY:
return deserializeCollection(typeRoot, dataTypeNode);
case MAP:
return deserializeMap(dataTypeNode);
case ROW:
return deserializeRow(dataTypeNode);
default:
throw new UnsupportedOperationException("Unsupported type root: " + typeRoot);
}
}