public static Optional extract()

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));
    }