code: public WorkProcessor<Page> merge(List<Type> keyTypes, List<Type> allTypes, List<WorkProcessor<Page>> channels, DriverYieldSignal driverYieldSignal)
      {
          InterpretedHashGenerator hashGenerator = createHashGenerator(keyTypes);
          return mergeSortedPages(
                  channels,
                  createHashPageWithPositionComparator(hashGenerator),
                  IntStream.range(0, allTypes.size()).boxed().collect(toImmutableList()),
                  allTypes,
                  keepSameHashValuesWithinSinglePage(hashGenerator),
                  true,
                  memoryContext,
                  driverYieldSignal);
      }
docs: Rows with same hash value are guaranteed to be in the same result page.