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.
{
        while (!atEnd() && !rhs.atEnd())
        {
            int cmp = compareAtCursor<left_nulls, right_nulls>(rhs);
            if (cmp < 0)
                impl.next();
            else if (cmp > 0)
                rhs.impl.next();
            else if (!cmp)
                return Range{impl.getRow(), rhs.impl.getRow(), getEqualLength(), rhs.getEqualLength()};
        }
        return Range{impl.getRow(), rhs.impl.getRow(), 0, 0};
    }
    template <bool left_nulls, bool right_nulls>
    int ALWAYS_INLINE compareAtCursor(const MergeJoinCursor & rhs) const
    {
        for (size_t i = 0; i < impl.sort_columns_size; ++i)
        {
            const auto * left_column = impl.sort_columns[i];
            const auto * right_column = rhs.impl.sort_columns[i];
            int res = nullableCompareAt<left_nulls, right_nulls>(*left_column, *right_column, impl.getRow(), rhs.impl.getRow());
            if (res)
                return res;
        }
        return 0;
    }
    
    size_t getEqualLength()