in src/main/java/org/apache/paimon/trino/TrinoFilterExtractor.java [58:98]
public static Optional<TrinoFilter> extract(
TrinoCatalog catalog, TrinoTableHandle trinoTableHandle, Constraint constraint) {
TupleDomain<TrinoColumnHandle> oldFilter = trinoTableHandle.getFilter();
TupleDomain<TrinoColumnHandle> newFilter =
constraint
.getSummary()
.transformKeys(TrinoColumnHandle.class::cast)
.intersect(oldFilter);
if (oldFilter.equals(newFilter)) {
return Optional.empty();
}
Map<TrinoColumnHandle, Domain> trinoColumnHandleForExpressionFilter =
extractTrinoColumnHandleForExpressionFilter(constraint);
LinkedHashMap<TrinoColumnHandle, Domain> acceptedDomains = new LinkedHashMap<>();
LinkedHashMap<TrinoColumnHandle, Domain> unsupportedDomains = new LinkedHashMap<>();
new TrinoFilterConverter(trinoTableHandle.table(catalog).rowType())
.convert(newFilter, acceptedDomains, unsupportedDomains);
List<String> partitionKeys = trinoTableHandle.table(catalog).partitionKeys();
LinkedHashMap<TrinoColumnHandle, Domain> unenforcedDomains = new LinkedHashMap<>();
acceptedDomains.forEach(
(columnHandle, domain) -> {
if (!partitionKeys.contains(columnHandle.getColumnName())) {
unenforcedDomains.put(columnHandle, domain);
}
});
acceptedDomains.putAll(trinoColumnHandleForExpressionFilter);
@SuppressWarnings({"unchecked", "rawtypes"})
TupleDomain<ColumnHandle> remain =
(TupleDomain)
TupleDomain.withColumnDomains(unsupportedDomains)
.intersect(TupleDomain.withColumnDomains(unenforcedDomains));
return Optional.of(new TrinoFilter(TupleDomain.withColumnDomains(acceptedDomains), remain));
}