private ConnectorPageSource createOrcDataPageSource()

in src/main/java/org/apache/paimon/trino/TrinoPageSourceProvider.java [367:431]


    private ConnectorPageSource createOrcDataPageSource(
            TrinoInputFile inputFile,
            OrcReaderOptions options,
            List<String> columns,
            List<Type> types,
            List<Domain> domains) {
        try {
            OrcDataSource orcDataSource = new TrinoOrcDataSource(inputFile, options);
            OrcReader reader =
                    OrcReader.createOrcReader(orcDataSource, options)
                            .orElseThrow(() -> new RuntimeException("ORC file is zero length"));

            List<OrcColumn> fileColumns = reader.getRootColumn().getNestedColumns();
            Map<String, OrcColumn> fieldsMap = new HashMap<>();
            fileColumns.forEach(column -> fieldsMap.put(column.getColumnName(), column));
            TupleDomainOrcPredicate.TupleDomainOrcPredicateBuilder predicateBuilder =
                    TupleDomainOrcPredicate.builder();
            List<OrcPageSource.ColumnAdaptation> columnAdaptations = new ArrayList<>();
            List<OrcColumn> fileReadColumns = new ArrayList<>(columns.size());
            List<Type> fileReadTypes = new ArrayList<>(columns.size());

            for (int i = 0; i < columns.size(); i++) {
                if (columns.get(i) != null) {
                    // column exists
                    columnAdaptations.add(
                            OrcPageSource.ColumnAdaptation.sourceColumn(fileReadColumns.size()));
                    OrcColumn orcColumn = fieldsMap.get(columns.get(i));
                    if (orcColumn == null) {
                        throw new RuntimeException(
                                "Column " + columns.get(i) + " does not exist in orc file.");
                    }
                    fileReadColumns.add(orcColumn);
                    fileReadTypes.add(types.get(i));
                    if (domains.get(i) != null) {
                        predicateBuilder.addColumn(orcColumn.getColumnId(), domains.get(i));
                    }
                } else {
                    columnAdaptations.add(OrcPageSource.ColumnAdaptation.nullColumn(types.get(i)));
                }
            }

            AggregatedMemoryContext memoryUsage = newSimpleAggregatedMemoryContext();
            OrcRecordReader recordReader =
                    reader.createRecordReader(
                            fileReadColumns,
                            fileReadTypes,
                            predicateBuilder.build(),
                            DateTimeZone.UTC,
                            memoryUsage,
                            INITIAL_BATCH_SIZE,
                            RuntimeException::new);

            return new OrcPageSource(
                    recordReader,
                    columnAdaptations,
                    orcDataSource,
                    Optional.empty(),
                    Optional.empty(),
                    memoryUsage,
                    new FileFormatDataSourceStats(),
                    reader.getCompressionKind());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }