-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
…auleType and mapKeyType not equals map Biggest mapKeytype or mapValueType
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1163,6 +1163,47 @@ private static RelDataType mapReturnType(SqlOperatorBinding opBinding) { | |
false); | ||
} | ||
|
||
private static RelDataType mapKeyReturnType(SqlOperatorBinding opBinding) { | ||
Pair<RelDataType, RelDataType> type = getAndAdjustComponentTypes(opBinding); | ||
return SqlTypeUtil.createArrayType( | ||
opBinding.getTypeFactory(), | ||
requireNonNull(type.left, "inferred key type"), | ||
Check failure on line 1170 in core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java
|
||
false); | ||
} | ||
|
||
@SuppressWarnings("argument.type.incompatible") | ||
private static RelDataType mapValueReturnType(SqlOperatorBinding opBinding) { | ||
Pair<RelDataType, RelDataType> type = getAndAdjustComponentTypes(opBinding); | ||
return SqlTypeUtil.createArrayType( | ||
opBinding.getTypeFactory(), | ||
requireNonNull(type.right, "inferred value type"), | ||
Check failure on line 1179 in core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java
|
||
false); | ||
} | ||
|
||
private static @Nullable Pair<RelDataType, RelDataType> getAndAdjustComponentTypes( | ||
SqlOperatorBinding opBinding) { | ||
List<RelDataType> operandType = new ArrayList<>(); | ||
|
||
RelDataType keyType = opBinding.collectOperandTypes().get(0).getKeyType(); | ||
RelDataType valueType = opBinding.collectOperandTypes().get(0).getValueType(); | ||
|
||
requireNonNull(keyType, () -> "keyType of " + keyType); | ||
requireNonNull(valueType, () -> "valuetype left of " + valueType); | ||
operandType.add(keyType); | ||
operandType.add(valueType); | ||
Pair<@Nullable RelDataType, @Nullable RelDataType> type = | ||
getComponentTypes( | ||
opBinding.getTypeFactory(), operandType); | ||
|
||
requireNonNull(type.left, () -> "type left of " + type.left); | ||
requireNonNull(type.right, () -> "type right of " + type.right); | ||
if (type.left.getSqlTypeName() != SqlTypeName.UNKNOWN | ||
&& type.right.getSqlTypeName() != SqlTypeName.UNKNOWN) { | ||
SqlValidatorUtil.adjustTypeForMapFunctionConstructor(type, opBinding); | ||
Check failure on line 1202 in core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java
|
||
} | ||
return type; | ||
Check failure on line 1204 in core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java
|
||
} | ||
|
||
private static Pair<@Nullable RelDataType, @Nullable RelDataType> getComponentTypes( | ||
RelDataTypeFactory typeFactory, | ||
List<RelDataType> argTypes) { | ||
|
@@ -1514,14 +1555,14 @@ private static RelDataType deriveTypeMapConcat(SqlOperatorBinding opBinding) { | |
@LibraryOperator(libraries = {SPARK}) | ||
public static final SqlFunction MAP_KEYS = | ||
SqlBasicFunction.create(SqlKind.MAP_KEYS, | ||
ReturnTypes.TO_MAP_KEYS_NULLABLE, | ||
SqlLibraryOperators::mapKeyReturnType, | ||
OperandTypes.MAP); | ||
|
||
/** The "MAP_VALUES(map)" function. */ | ||
@LibraryOperator(libraries = {SPARK}) | ||
public static final SqlFunction MAP_VALUES = | ||
SqlBasicFunction.create(SqlKind.MAP_VALUES, | ||
ReturnTypes.TO_MAP_VALUES_NULLABLE, | ||
SqlLibraryOperators::mapValueReturnType, | ||
OperandTypes.MAP); | ||
|
||
/** The "MAP_CONTAINS_KEY(map, key)" function. */ | ||
|