@Override
  public Optional<ConstraintApplicationResult<ConnectorTableHandle>> applyFilter(
      ConnectorSession session, ConnectorTableHandle handle, Constraint constraint) {
    IcebergTableHandle table = (IcebergTableHandle) handle;
    Table icebergTable = loadTable(session, table.getSchemaTableName());

    Set<Integer> partitionSourceIds = identityPartitionColumnsInAllSpecs(icebergTable);
    BiPredicate<IcebergColumnHandle, Domain> isIdentityPartition =
        (column, domain) -> partitionSourceIds.contains(column.getId());
    // Iceberg metadata columns can not be used in table scans
    BiPredicate<IcebergColumnHandle, Domain> isMetadataColumn =
        (column, domain) -> isMetadataColumnId(column.getId());

    TupleDomain<IcebergColumnHandle> newEnforcedConstraint =
        constraint
            .getSummary()
            .transformKeys(IcebergColumnHandle.class::cast)
            .filter(isIdentityPartition)
            .intersect(table.getEnforcedPredicate());

    TupleDomain<IcebergColumnHandle> remainingConstraint =
        constraint
            .getSummary()
            .transformKeys(IcebergColumnHandle.class::cast)
            .filter(isIdentityPartition.negate())
            .filter(isMetadataColumn.negate());

    TupleDomain<IcebergColumnHandle> newUnenforcedConstraint =
        remainingConstraint
            // TODO: Remove after completing https://github.com/trinodb/trino/issues/8759
            // Only applies to the unenforced constraint because structural types cannot be
            // partition keys
            .filter((columnHandle, predicate) -> !isStructuralType(columnHandle.getType()))
            .intersect(table.getUnenforcedPredicate());

    if (newEnforcedConstraint.equals(table.getEnforcedPredicate())
        && newUnenforcedConstraint.equals(table.getUnenforcedPredicate())) {
      return Optional.empty();
    }
    if (table instanceof AdaptHiveIcebergTableHandle) {
      return Optional.of(
          new ConstraintApplicationResult<>(
              new AdaptHiveIcebergTableHandle(
                  table.getSchemaName(),
                  table.getTableName(),
                  table.getTableType(),
                  table.getSnapshotId(),
                  table.getTableSchemaJson(),
                  table.getPartitionSpecJson(),
                  table.getFormatVersion(),
                  newUnenforcedConstraint,
                  newEnforcedConstraint,
                  table.getProjectedColumns(),
                  table.getNameMappingJson(),
                  table.getTableLocation(),
                  table.getStorageProperties(),
                  table.getRetryMode(),
                  table.getUpdatedColumns(),
                  table.isRecordScannedFiles(),
                  table.getMaxScannedFileSize()),
              remainingConstraint.transformKeys(ColumnHandle.class::cast),
              false));
    }

    return Optional.of(
        new ConstraintApplicationResult<>(
            new IcebergTableHandle(
                table.getSchemaName(),
                table.getTableName(),
                table.getTableType(),
                table.getSnapshotId(),
                table.getTableSchemaJson(),
                table.getPartitionSpecJson(),
                table.getFormatVersion(),
                newUnenforcedConstraint,
                newEnforcedConstraint,
                table.getProjectedColumns(),
                table.getNameMappingJson(),
                table.getTableLocation(),
                table.getStorageProperties(),
                table.getRetryMode(),
                table.getUpdatedColumns(),
                table.isRecordScannedFiles(),
                table.getMaxScannedFileSize()),
            remainingConstraint.transformKeys(ColumnHandle.class::cast),
            false));
  }
Iceberg original metadata has some problems for mixed-format table, such as iceberg version,
table type. So copy from IcebergMetadata and made some change
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/unkeyed/IcebergMetadata.java