private static TupleDomain<ColumnDescriptor> getParquetTupleDomain(
      Map<List<String>, ColumnDescriptor> descriptorsByPath,
      TupleDomain<IcebergColumnHandle> effectivePredicate) {
    if (effectivePredicate.isNone()) {
      return TupleDomain.none();
    }

    ImmutableMap.Builder<ColumnDescriptor, Domain> predicate = ImmutableMap.builder();
    effectivePredicate
        .getDomains()
        .orElseThrow()
        .forEach(
            (columnHandle, domain) -> {
              String baseType = columnHandle.getType().getTypeSignature().getBase();
              // skip looking up predicates for complex types as Parquet only stores stats for
              // primitives
              if (columnHandle.isBaseColumn()
                  && (!baseType.equals(StandardTypes.MAP)
                      && !baseType.equals(StandardTypes.ARRAY)
                      && !baseType.equals(StandardTypes.ROW))) {
                ColumnDescriptor descriptor =
                    descriptorsByPath.get(ImmutableList.of(columnHandle.getName()));
                if (descriptor != null) {
                  predicate.put(descriptor, domain);
                }
              }
            });
    return TupleDomain.withColumnDomains(predicate.buildOrThrow());
  }
Creates a mapping between the input {@code columns} and base columns if required.
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/unkeyed/IcebergPageSourceProvider.java