/
ArrayAppendPrependTypeStrategy.java
32 lines (28 loc) · 1.34 KB
/
ArrayAppendPrependTypeStrategy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package org.apache.flink.table.types.inference.strategies;
import org.apache.flink.annotation.Internal;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.types.DataType;
import org.apache.flink.table.types.inference.CallContext;
import org.apache.flink.table.types.inference.TypeStrategy;
import org.apache.flink.table.types.logical.LogicalType;
import java.util.List;
import java.util.Optional;
import static org.apache.flink.table.types.utils.TypeConversions.fromLogicalToDataType;
/**
* Type strategy that returns a {@link DataTypes#ARRAY(DataType)} with element type equal to the
* type of the first argument.
*/
@Internal
public class ArrayAppendPrependTypeStrategy implements TypeStrategy {
@Override
public Optional<DataType> inferType(CallContext callContext) {
final List<DataType> argumentDataTypes = callContext.getArgumentDataTypes();
final DataType arrayDataType = argumentDataTypes.get(0);
final DataType elementToAddDataType = argumentDataTypes.get(1);
LogicalType logicalType = arrayDataType.getLogicalType().getChildren().get(0);
if (elementToAddDataType.getLogicalType().isNullable() && !logicalType.isNullable()) {
return Optional.of(DataTypes.ARRAY(fromLogicalToDataType(logicalType).nullable()));
}
return Optional.of(arrayDataType);
}
}