Thankfully "partial merge join" is disabled by default.

```
milovidov-desktop :) SET max_block_size = 6, join_algorithm = 'partial_merge'

SET max_block_size = 6, join_algorithm = 'partial_merge'

Query id: 600704b7-b455-4726-8a9c-8e45b509f2fb

Ok.

0 rows in set. Elapsed: 0.002 sec. 

milovidov-desktop :) SELECT blockSize() bs FROM (SELECT 1 s) js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3]) s) js2 USING (s) GROUP BY bs ORDER BY bs;

SELECT blockSize() AS bs
FROM
(
    SELECT 1 AS s
) AS js1
ALL RIGHT JOIN
(
    SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3]) AS s
) AS js2 USING (s)
GROUP BY bs
ORDER BY bs ASC

Query id: ae51c589-4b69-4e90-a3a9-7ef4ead72af9

→ Progress: 2.00 rows, 2.00 B (18.21 rows/s., 18.21 B/s.)
```

Found by stress test.
{
    if constexpr (!in_memory)
        return flushed_right_blocks.size();
    else
        return loaded_right_blocks.size();
}
template <bool in_memory>
std::shared_ptr<Block> MergeJoin::loadRightBlock(size_t pos) const
{
    if constexpr (!in_memory)
    {
        auto load_func = [&]() -> std::shared_ptr<Block>
        {
            TemporaryFileStream input(flushed_right_blocks[pos]->path(), materializeBlock(right_sample_block));
            return std::make_shared<Block>(input.block_in->read());
        };
        return cached_right_blocks->getOrSet(pos, load_func).first;
    }
    else
        return loaded_right_blocks[pos];
}
void MergeJoin::initRightTableWriter()
{
    disk_writer = std::make_unique<SortedBlocksWriter>(size_limits, table_join->getTemporaryVolume(),
                    right_sample_block, right_sort_description, max_rows_in_right_block, max_files_to_merge,
                    table_join->temporaryFilesCodec());
    disk_writer->addBlocks(right_blocks);
    right_blocks.clear();
}
class NonMergeJoinedBlockInputStream : private NotJoined, public IBlockInputStream