Search in sources :

Example 56 with LogicalType

use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.

the class DecimalPlusTypeStrategy method inferType.

@Override
public Optional<DataType> inferType(CallContext callContext) {
    final List<DataType> argumentDataTypes = callContext.getArgumentDataTypes();
    final LogicalType addend1 = argumentDataTypes.get(0).getLogicalType();
    final LogicalType addend2 = argumentDataTypes.get(1).getLogicalType();
    // a hack to make legacy types possible until we drop them
    if (addend1 instanceof LegacyTypeInformationType) {
        return Optional.of(argumentDataTypes.get(0));
    }
    if (addend2 instanceof LegacyTypeInformationType) {
        return Optional.of(argumentDataTypes.get(1));
    }
    if (!isDecimalComputation(addend1, addend2)) {
        return Optional.empty();
    }
    final DecimalType decimalType = LogicalTypeMerging.findAdditionDecimalType(getPrecision(addend1), getScale(addend1), getPrecision(addend2), getScale(addend2));
    return Optional.of(fromLogicalToDataType(decimalType));
}
Also used : DataType(org.apache.flink.table.types.DataType) TypeConversions.fromLogicalToDataType(org.apache.flink.table.types.utils.TypeConversions.fromLogicalToDataType) LogicalType(org.apache.flink.table.types.logical.LogicalType) DecimalType(org.apache.flink.table.types.logical.DecimalType) LegacyTypeInformationType(org.apache.flink.table.types.logical.LegacyTypeInformationType)

Example 57 with LogicalType

use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.

the class MapInputTypeStrategy method inferInputTypes.

@Override
public Optional<List<DataType>> inferInputTypes(CallContext callContext, boolean throwOnFailure) {
    List<DataType> argumentDataTypes = callContext.getArgumentDataTypes();
    if (argumentDataTypes.size() == 0) {
        return Optional.empty();
    }
    List<LogicalType> keyTypes = new ArrayList<>();
    List<LogicalType> valueTypes = new ArrayList<>();
    for (int i = 0; i < argumentDataTypes.size(); i++) {
        LogicalType logicalType = argumentDataTypes.get(i).getLogicalType();
        if (i % 2 == 0) {
            keyTypes.add(logicalType);
        } else {
            valueTypes.add(logicalType);
        }
    }
    Optional<LogicalType> commonKeyType = LogicalTypeMerging.findCommonType(keyTypes);
    Optional<LogicalType> commonValueType = LogicalTypeMerging.findCommonType(valueTypes);
    if (!commonKeyType.isPresent() || !commonValueType.isPresent()) {
        return Optional.empty();
    }
    DataType keyType = TypeConversions.fromLogicalToDataType(commonKeyType.get());
    DataType valueType = TypeConversions.fromLogicalToDataType(commonValueType.get());
    return Optional.of(IntStream.range(0, argumentDataTypes.size()).mapToObj(idx -> {
        if (idx % 2 == 0) {
            return keyType;
        } else {
            return valueType;
        }
    }).collect(Collectors.toList()));
}
Also used : ArrayList(java.util.ArrayList) DataType(org.apache.flink.table.types.DataType) LogicalType(org.apache.flink.table.types.logical.LogicalType)

Example 58 with LogicalType

use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.

the class CastInputTypeStrategy method inferInputTypes.

@Override
public Optional<List<DataType>> inferInputTypes(CallContext callContext, boolean throwOnFailure) {
    // check for type literal
    if (!callContext.isArgumentLiteral(1) || !callContext.getArgumentValue(1, DataType.class).isPresent()) {
        return Optional.empty();
    }
    final List<DataType> argumentDataTypes = callContext.getArgumentDataTypes();
    final LogicalType fromType = argumentDataTypes.get(0).getLogicalType();
    final LogicalType toType = argumentDataTypes.get(1).getLogicalType();
    // A hack to support legacy types. To be removed when we drop the legacy types.
    if (fromType instanceof LegacyTypeInformationType) {
        return Optional.of(argumentDataTypes);
    }
    if (!supportsExplicitCast(fromType, toType)) {
        if (throwOnFailure) {
            throw callContext.newValidationError("Unsupported cast from '%s' to '%s'.", fromType, toType);
        }
        return Optional.empty();
    }
    return Optional.of(argumentDataTypes);
}
Also used : DataType(org.apache.flink.table.types.DataType) LogicalType(org.apache.flink.table.types.logical.LogicalType) LegacyTypeInformationType(org.apache.flink.table.types.logical.LegacyTypeInformationType)

Example 59 with LogicalType

use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.

the class DataTypeExtractor method closestBridging.

/**
 * Use closest class for data type if possible. Even though a hint might have provided some data
 * type, in many cases, the conversion class can be enriched with the extraction type itself.
 */
private DataType closestBridging(DataType dataType, @Nullable Class<?> clazz) {
    // no context class or conversion class is already more specific than context class
    if (clazz == null || clazz.isAssignableFrom(dataType.getConversionClass())) {
        return dataType;
    }
    final LogicalType logicalType = dataType.getLogicalType();
    final boolean supportsConversion = logicalType.supportsInputConversion(clazz) || logicalType.supportsOutputConversion(clazz);
    if (supportsConversion) {
        return dataType.bridgedTo(clazz);
    }
    return dataType;
}
Also used : LogicalType(org.apache.flink.table.types.logical.LogicalType)

Example 60 with LogicalType

use of org.apache.flink.table.types.logical.LogicalType in project flink by apache.

the class AggDecimalPlusTypeStrategy method inferType.

@Override
public Optional<DataType> inferType(CallContext callContext) {
    final List<DataType> argumentDataTypes = callContext.getArgumentDataTypes();
    final LogicalType addend1 = argumentDataTypes.get(0).getLogicalType();
    final LogicalType addend2 = argumentDataTypes.get(1).getLogicalType();
    Preconditions.checkArgument(addend1.is(LogicalTypeRoot.DECIMAL), ERROR_MSG);
    Preconditions.checkArgument(addend2.is(LogicalTypeRoot.DECIMAL), ERROR_MSG);
    return Optional.of(fromLogicalToDataType(LogicalTypeMerging.findSumAggType(addend2)));
}
Also used : DataType(org.apache.flink.table.types.DataType) TypeConversions.fromLogicalToDataType(org.apache.flink.table.types.utils.TypeConversions.fromLogicalToDataType) LogicalType(org.apache.flink.table.types.logical.LogicalType)

Aggregations

LogicalType (org.apache.flink.table.types.logical.LogicalType)192 DataType (org.apache.flink.table.types.DataType)53 RowType (org.apache.flink.table.types.logical.RowType)53 RowData (org.apache.flink.table.data.RowData)45 List (java.util.List)29 ArrayList (java.util.ArrayList)28 TableException (org.apache.flink.table.api.TableException)25 TimestampType (org.apache.flink.table.types.logical.TimestampType)25 Internal (org.apache.flink.annotation.Internal)21 IntType (org.apache.flink.table.types.logical.IntType)21 Map (java.util.Map)20 ValidationException (org.apache.flink.table.api.ValidationException)20 ArrayType (org.apache.flink.table.types.logical.ArrayType)19 DecimalType (org.apache.flink.table.types.logical.DecimalType)19 LocalZonedTimestampType (org.apache.flink.table.types.logical.LocalZonedTimestampType)17 Test (org.junit.Test)17 BigIntType (org.apache.flink.table.types.logical.BigIntType)16 LegacyTypeInformationType (org.apache.flink.table.types.logical.LegacyTypeInformationType)16 GenericRowData (org.apache.flink.table.data.GenericRowData)15 Arrays (java.util.Arrays)14