in src/main/java/org/apache/paimon/trino/TrinoFilterConverter.java [88:138]
public Optional<Predicate> convert(
TupleDomain<TrinoColumnHandle> tupleDomain,
LinkedHashMap<TrinoColumnHandle, Domain> acceptedDomains,
LinkedHashMap<TrinoColumnHandle, Domain> unsupportedDomains) {
if (tupleDomain.isAll()) {
// TODO alwaysTrue
return Optional.empty();
}
if (tupleDomain.getDomains().isEmpty()) {
// TODO alwaysFalse
return Optional.empty();
}
Map<TrinoColumnHandle, Domain> domainMap = tupleDomain.getDomains().get();
List<Predicate> conjuncts = new ArrayList<>();
List<String> fieldNames = FieldNameUtils.fieldNames(rowType);
for (Map.Entry<TrinoColumnHandle, Domain> entry : domainMap.entrySet()) {
TrinoColumnHandle columnHandle = entry.getKey();
Domain domain = entry.getValue();
String field = columnHandle.getColumnName();
Optional<Integer> nestedColumn = FileIndexOptions.topLevelIndexOfNested(field);
if (nestedColumn.isPresent()) {
int position = nestedColumn.get();
field = field.substring(0, position);
}
int index = fieldNames.indexOf(field);
if (index != -1) {
try {
conjuncts.add(
toPredicate(
index,
columnHandle.getColumnName(),
columnHandle.getTrinoType(),
domain));
acceptedDomains.put(columnHandle, domain);
continue;
} catch (UnsupportedOperationException exception) {
LOG.warn(
"Unsupported predicate, maybe the type of column is not supported yet.",
exception);
}
}
unsupportedDomains.put(columnHandle, domain);
}
if (conjuncts.isEmpty()) {
return Optional.empty();
}
return Optional.of(and(conjuncts));
}