in flink-cdc-runtime/src/main/java/org/apache/flink/cdc/runtime/typeutils/DataTypeConverter.java [370:418]
public static DataType convertCalciteRelDataTypeToDataType(RelDataType relDataType) {
switch (relDataType.getSqlTypeName()) {
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 DATE:
return DataTypes.DATE();
case TIME:
case TIME_WITH_LOCAL_TIME_ZONE:
return DataTypes.TIME(relDataType.getPrecision());
case TIMESTAMP:
return DataTypes.TIMESTAMP(relDataType.getPrecision());
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return DataTypes.TIMESTAMP_LTZ(relDataType.getPrecision());
case FLOAT:
return DataTypes.FLOAT();
case DOUBLE:
return DataTypes.DOUBLE();
case CHAR:
case VARCHAR:
return DataTypes.STRING();
case BINARY:
return DataTypes.BINARY(relDataType.getPrecision());
case VARBINARY:
return DataTypes.VARBINARY(relDataType.getPrecision());
case DECIMAL:
return DataTypes.DECIMAL(relDataType.getPrecision(), relDataType.getScale());
case ARRAY:
RelDataType componentType = relDataType.getComponentType();
return DataTypes.ARRAY(convertCalciteRelDataTypeToDataType(componentType));
case MAP:
RelDataType keyType = relDataType.getKeyType();
RelDataType valueType = relDataType.getValueType();
return DataTypes.MAP(
convertCalciteRelDataTypeToDataType(keyType),
convertCalciteRelDataTypeToDataType(valueType));
case ROW:
default:
throw new UnsupportedOperationException(
"Unsupported type: " + relDataType.getSqlTypeName());
}
}