in paimon-presto-common/src/main/java/org/apache/paimon/presto/PrestoFilterConverter.java [100:152]
private Predicate toPredicate(int columnIndex, Type type, Domain domain) {
if (domain.isAll()) {
// TODO alwaysTrue
throw new UnsupportedOperationException();
}
if (domain.getValues().isNone()) {
if (domain.isNullAllowed()) {
return builder.isNull((columnIndex));
}
// TODO alwaysFalse
throw new UnsupportedOperationException();
}
if (domain.getValues().isAll()) {
if (domain.isNullAllowed()) {
// TODO alwaysTrue
throw new UnsupportedOperationException();
}
return builder.isNotNull((columnIndex));
}
// TODO support structural types
if (type instanceof ArrayType
|| type instanceof MapType
|| type instanceof com.facebook.presto.common.type.RowType) {
// Fail fast. Ignoring expression could lead to data loss in case of deletions.
throw new UnsupportedOperationException();
}
if (type.isOrderable()) {
List<Range> orderedRanges = domain.getValues().getRanges().getOrderedRanges();
List<Object> values = new ArrayList<>();
List<Predicate> predicates = new ArrayList<>();
for (Range range : orderedRanges) {
if (range.isSingleValue()) {
values.add(getLiteralValue(type, range.getLowBoundedValue()));
} else {
predicates.add(toPredicate(columnIndex, range));
}
}
if (!values.isEmpty()) {
predicates.add(builder.in(columnIndex, values));
}
if (domain.isNullAllowed()) {
predicates.add(builder.isNull(columnIndex));
}
return PredicateBuilder.or(predicates);
}
throw new UnsupportedOperationException();
}