checkState(!finishing, "Operator is finishing");
checkState(channelSet != null, "Set has not been built yet");
checkState(outputPage == null, "Operator still has pending output");
// update hashing strategy to use probe block
UncompressedBlock probeJoinBlock = (UncompressedBlock) page.getBlock(probeJoinChannel);
channelSet.setLookupSlice(probeJoinBlock.getSlice());
// create the block builder for the new boolean column
// we know the exact size required for the block
int blockSize = page.getPositionCount() * TupleInfo.SINGLE_BOOLEAN.getFixedSize();
BlockBuilder blockBuilder = new BlockBuilder(TupleInfo.SINGLE_BOOLEAN, blockSize, Slices.allocate(blockSize).getOutput());
BlockCursor probeJoinCursor = probeJoinBlock.cursor();
for (int position = 0; position < page.getPositionCount(); position++) {
checkState(probeJoinCursor.advanceNextPosition());
if (probeJoinCursor.isNull(0)) {
blockBuilder.appendNull();
}