public boolean hasNext() {
    if (splitQueue.isEmpty()) {
      ContinuousEnumerationResult planResult =
          continuousSplitPlanner.planSplits(enumeratorPosition.get(), filters);
      if (!planResult.isEmpty()) {
        planResult.splits().forEach(split -> LOG.info("Putting this split into queue: {}.", split));
        splitQueue.addAll(planResult.splits());
      }
      if (!planResult.toOffset().isEmpty()) {
        enumeratorPosition.set(planResult.toOffset());
      }
      LOG.info(
          "Currently, queue contain {} splits, scan position is {}.",
          splitQueue.size(),
          enumeratorPosition.get());
      return !splitQueue.isEmpty();
    }
    return true;
  }
This is a mixed-format table(mixed iceberg, mixed-hive) incremental loader.

<p>This loader is used to load data by the merge on read approach first, then by the incremental
pull approach.

<p>Merge on read approach only contain INSERT rows.

<p>Incremental pull approach contains INSERT, DELETE, UPDATE_BEFORE, and UPDATE_AFTER.

<p>Support projection and filter push-down to speed up the loading process.
amoro-format-mixed/amoro-mixed-flink/amoro-mixed-flink-common/src/main/java/org/apache/amoro/flink/read/MixedIncrementalLoader.java