public ConnectorSplitSource getSplits()

in paimon-presto-common/src/main/java/org/apache/paimon/presto/PrestoSplitManager.java [46:82]


    public ConnectorSplitSource getSplits(
            ConnectorTransactionHandle transactionHandle,
            ConnectorSession session,
            ConnectorTableLayoutHandle layout,
            SplitSchedulingContext splitSchedulingContext) {

        PrestoTableHandle tableHandle = ((PrestoTableLayoutHandle) layout).getTableHandle();
        Table table = tableHandle.table();
        ReadBuilder readBuilder = table.newReadBuilder();
        new PrestoFilterConverter(table.rowType())
                .convert(tableHandle.getFilter())
                .ifPresent(readBuilder::withFilter);
        Optional<List<Map<String, String>>> partitions = tableHandle.getPartitions();
        org.apache.paimon.types.RowType partitionType =
                table.rowType().project(table.partitionKeys());
        List<Predicate> predicates = new ArrayList<>();

        String partitionDefaultName = new CoreOptions(table.options()).partitionDefaultName();
        if (partitions.isPresent()) {
            for (Map<String, String> row : partitions.get()) {
                Map<String, Object> partition =
                        InternalRowPartitionComputer.convertSpecToInternal(
                                row, partitionType, partitionDefaultName);
                predicates.add(
                        PartitionPredicate.createPartitionPredicate(table.rowType(), partition));
            }
            if (!predicates.isEmpty()) {
                readBuilder.withFilter(PredicateBuilder.or(predicates));
            } else {
                // empty partition
                return new PrestoSplitSource(new ArrayList<>());
            }
        }
        List<Split> splits = readBuilder.newScan().plan().splits();
        return new PrestoSplitSource(
                splits.stream().map(PrestoSplit::fromSplit).collect(Collectors.toList()));
    }