protected ConnectorSplitSource getSplits()

in src/main/java/org/apache/paimon/trino/TrinoSplitManager.java [63:93]


    protected ConnectorSplitSource getSplits(
            ConnectorTableHandle connectorTableHandle, ConnectorSession session) {
        // TODO dynamicFilter?
        // TODO what is constraint?

        TrinoTableHandle tableHandle = (TrinoTableHandle) connectorTableHandle;
        Table table = tableHandle.tableWithDynamicOptions(trinoCatalog, session);
        ReadBuilder readBuilder = table.newReadBuilder();
        new TrinoFilterConverter(table.rowType())
                .convert(tableHandle.getFilter())
                .ifPresent(readBuilder::withFilter);
        tableHandle.getLimit().ifPresent(limit -> readBuilder.withLimit((int) limit));
        List<Split> splits = readBuilder.dropStats().newScan().plan().splits();

        long maxRowCount = splits.stream().mapToLong(Split::rowCount).max().orElse(0L);
        double minimumSplitWeight = TrinoSessionProperties.getMinimumSplitWeight(session);
        return new TrinoSplitSource(
                splits.stream()
                        .map(
                                split ->
                                        TrinoSplit.fromSplit(
                                                split,
                                                Math.min(
                                                        Math.max(
                                                                (double) split.rowCount()
                                                                        / maxRowCount,
                                                                minimumSplitWeight),
                                                        1.0)))
                        .collect(Collectors.toList()),
                ((TrinoTableHandle) connectorTableHandle).getLimit());
    }