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.
void applyOr(Container && addition) noexcept
        {
            std::lock_guard lock(mutex);
            if (bitmap.empty())
            {
                bitmap.swap(addition);
                return;
            }
            
            for (size_t i = 0; i < bitmap.size(); ++i)
                if (addition[i])
                    bitmap[i] = true;
        }
    };
    using Container = Bitmap::Container;
    explicit RowBitmaps(size_t size)
    {
        maps.reserve(size);
        for (size_t i = 0; i < size; ++i)
            maps.emplace_back(std::make_unique<Bitmap>());
    }
    bool used(size_t bitmap_number) const
    {
        return !maps[bitmap_number]->empty();
    }
    void applyOr(size_t bitmap_number, Container && addition) noexcept
    {
        maps[bitmap_number]->applyOr(std::move(addition));
    }
    IColumn::Filter getNotUsed(size_t bitmap_number) const