in src/main/java/org/apache/paimon/trino/TrinoFilterExtractor.java [146:200]
private static Map<TrinoColumnHandle, Domain> handleExpressionEqualOrIn(
Map<String, ColumnHandle> assignments, Call expression, boolean inClause) {
Call elementAtExpression = (Call) expression.getArguments().get(0);
String functionName = elementAtExpression.getFunctionName().getName();
switch (functionName) {
case TRINO_MAP_ELEMENT_AT_FUNCTION_NAME:
{
Variable columnExpression =
(Variable) elementAtExpression.getArguments().get(0);
Constant columnKey = (Constant) elementAtExpression.getArguments().get(1);
Constant elementAtValue = (Constant) expression.getArguments().get(1);
List<Range> values;
Type elementType;
if (inClause) {
elementType = ((ArrayType) elementAtValue.getType()).getElementType();
values =
elementAtValue.getChildren().stream()
.filter(a -> ((Constant) a).getValue() != null)
.map(
arguemnt ->
Range.equal(
arguemnt.getType(),
((Constant) arguemnt).getValue()))
.collect(Collectors.toList());
} else {
elementType = elementAtValue.getType();
values =
elementAtValue.getValue() == null
? Collections.emptyList()
: ImmutableList.of(
Range.equal(
elementAtValue.getType(),
elementAtValue.getValue()));
}
if (columnKey.getValue() == null) {
throw new RuntimeException("Expression pares failed: " + expression);
}
return handleElementAtArguments(
assignments,
columnExpression.getName(),
((Slice) columnKey.getValue()).toStringUtf8(),
elementType,
values);
}
default:
{
return Collections.emptyMap();
}
}
}