public Optional convert()

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