public static ProjectedLayout createProjectedLayout(
        OrcColumn root, List<List<Integer>> fieldIdDereferences) {
      if (fieldIdDereferences.stream().anyMatch(List::isEmpty)) {
        return fullyProjectedLayout();
      }

      Map<Integer, List<List<Integer>>> dereferencesByField =
          fieldIdDereferences.stream()
              .collect(
                  groupingBy(
                      sequence -> sequence.get(0),
                      mapping(
                          sequence -> sequence.subList(1, sequence.size()), toUnmodifiableList())));

      ImmutableMap.Builder<Integer, ProjectedLayout> fieldLayouts = ImmutableMap.builder();
      for (OrcColumn nestedColumn : root.getNestedColumns()) {
        Integer fieldId = getIcebergFieldId(nestedColumn);
        if (dereferencesByField.containsKey(fieldId)) {
          fieldLayouts.put(
              fieldId, createProjectedLayout(nestedColumn, dereferencesByField.get(fieldId)));
        }
      }

      return new IcebergOrcProjectedLayout(fieldLayouts.buildOrThrow());
    }
Create a new NameMapping with the same names but converted to lowercase.

@param nameMapping The original NameMapping, potentially containing non-lowercase characters
amoro-format-mixed/amoro-mixed-trino/src/main/java/org/apache/amoro/trino/unkeyed/IcebergPageSourceProvider.java