mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 09:02:00 +00:00
Merge pull request #26374 from vdimir/infinite-pmj-fix
This commit is contained in:
commit
c8ead44c23
@ -1048,8 +1048,11 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rows_added >= max_block_size)
|
if (rows_added >= max_block_size)
|
||||||
|
{
|
||||||
|
++block_number;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return rows_added;
|
return rows_added;
|
||||||
}
|
}
|
||||||
|
@ -180,11 +180,9 @@ void JoiningTransform::transform(Chunk & chunk)
|
|||||||
Block JoiningTransform::readExecute(Chunk & chunk)
|
Block JoiningTransform::readExecute(Chunk & chunk)
|
||||||
{
|
{
|
||||||
Block res;
|
Block res;
|
||||||
// std::cerr << "=== Chunk rows " << chunk.getNumRows() << " cols " << chunk.getNumColumns() << std::endl;
|
|
||||||
|
|
||||||
if (!not_processed)
|
if (!not_processed)
|
||||||
{
|
{
|
||||||
// std::cerr << "!not_processed " << std::endl;
|
|
||||||
if (chunk.hasColumns())
|
if (chunk.hasColumns())
|
||||||
res = inputs.front().getHeader().cloneWithColumns(chunk.detachColumns());
|
res = inputs.front().getHeader().cloneWithColumns(chunk.detachColumns());
|
||||||
|
|
||||||
@ -193,7 +191,6 @@ Block JoiningTransform::readExecute(Chunk & chunk)
|
|||||||
}
|
}
|
||||||
else if (not_processed->empty()) /// There's not processed data inside expression.
|
else if (not_processed->empty()) /// There's not processed data inside expression.
|
||||||
{
|
{
|
||||||
// std::cerr << "not_processed->empty() " << std::endl;
|
|
||||||
if (chunk.hasColumns())
|
if (chunk.hasColumns())
|
||||||
res = inputs.front().getHeader().cloneWithColumns(chunk.detachColumns());
|
res = inputs.front().getHeader().cloneWithColumns(chunk.detachColumns());
|
||||||
|
|
||||||
@ -202,12 +199,10 @@ Block JoiningTransform::readExecute(Chunk & chunk)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// std::cerr << "not not_processed->empty() " << std::endl;
|
|
||||||
res = std::move(not_processed->block);
|
res = std::move(not_processed->block);
|
||||||
join->joinBlock(res, not_processed);
|
join->joinBlock(res, not_processed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// std::cerr << "Res block rows " << res.rows() << " cols " << res.columns() << std::endl;
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
19
tests/queries/0_stateless/01943_pmj_non_joined_stuck.sql
Normal file
19
tests/queries/0_stateless/01943_pmj_non_joined_stuck.sql
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
SET max_block_size = 6, join_algorithm = 'partial_merge';
|
||||||
|
|
||||||
|
SELECT count() == 4 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 5 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 6 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 7 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 8 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 9 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 10 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 11 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 12 FROM (SELECT 1 AS s) AS js1 ALL RIGHT JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 13 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]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 14 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);
|
||||||
|
SELECT count() == 15 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, 3]) AS s) AS js2 USING (s);
|
||||||
|
|
||||||
|
SELECT count() == 8 FROM (SELECT 1 AS s) AS js1 FULL JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 9 FROM (SELECT 1 AS s) AS js1 FULL JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 10 FROM (SELECT 1 AS s) AS js1 FULL JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3]) AS s) AS js2 USING (s);
|
||||||
|
SELECT count() == 11 FROM (SELECT 1 AS s) AS js1 FULL JOIN (SELECT arrayJoin([2, 2, 2, 2, 2, 2, 2, 3, 3, 3]) AS s) AS js2 USING (s);
|
Loading…
Reference in New Issue
Block a user