public PagePartitioner(
PartitionFunction partitionFunction,
List<Integer> partitionChannels,
List<Optional<NullableValue>> partitionConstants,
boolean replicatesAnyRow,
OptionalInt nullChannel,
OutputBuffer outputBuffer,
PagesSerdeFactory serdeFactory,
List<Type> sourceTypes,
DataSize maxMemory)
{
this.partitionFunction = requireNonNull(partitionFunction, "partitionFunction is null");
this.partitionChannels = requireNonNull(partitionChannels, "partitionChannels is null");
this.partitionConstants = requireNonNull(partitionConstants, "partitionConstants is null").stream()
.map(constant -> constant.map(NullableValue::asBlock))
.collect(toImmutableList());
this.replicatesAnyRow = replicatesAnyRow;
this.nullChannel = requireNonNull(nullChannel, "nullChannel is null");
this.outputBuffer = requireNonNull(outputBuffer, "outputBuffer is null");
this.sourceTypes = requireNonNull(sourceTypes, "sourceTypes is null");
this.serde = requireNonNull(serdeFactory, "serdeFactory is null").createPagesSerde();
int partitionCount = partitionFunction.getPartitionCount();
int pageSize = min(DEFAULT_MAX_PAGE_SIZE_IN_BYTES, ((int) maxMemory.toBytes()) / partitionCount);
pageSize = max(1, pageSize);
this.pageBuilders = new PageBuilder[partitionCount];
for (int i = 0; i < partitionCount; i++) {
pageBuilders[i] = PageBuilder.withMaxPageSize(pageSize, sourceTypes);
}
}