mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-18 20:32:43 +00:00
dbms: addition [#METR-19025].
This commit is contained in:
parent
7e5b79fbe9
commit
e64197d436
@ -131,6 +131,7 @@ void MergingSortedBlockInputStream::merge(ColumnPlainPtrs & merged_columns, std:
|
|||||||
++total_merged_rows;
|
++total_merged_rows;
|
||||||
if (limit && total_merged_rows == limit)
|
if (limit && total_merged_rows == limit)
|
||||||
{
|
{
|
||||||
|
// std::cerr << "Limit reached\n";
|
||||||
cancel();
|
cancel();
|
||||||
finished = true;
|
finished = true;
|
||||||
return true;
|
return true;
|
||||||
@ -138,7 +139,10 @@ void MergingSortedBlockInputStream::merge(ColumnPlainPtrs & merged_columns, std:
|
|||||||
|
|
||||||
++merged_rows;
|
++merged_rows;
|
||||||
if (merged_rows == max_block_size)
|
if (merged_rows == max_block_size)
|
||||||
|
{
|
||||||
|
// std::cerr << "max_block_size reached\n";
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@ -151,30 +155,39 @@ void MergingSortedBlockInputStream::merge(ColumnPlainPtrs & merged_columns, std:
|
|||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
// std::cerr << "total_merged_rows: " << total_merged_rows << ", merged_rows: " << merged_rows << "\n";
|
||||||
|
// std::cerr << "Inserting row\n";
|
||||||
for (size_t i = 0; i < num_columns; ++i)
|
for (size_t i = 0; i < num_columns; ++i)
|
||||||
merged_columns[i]->insertFrom(*current->all_columns[i], current->pos);
|
merged_columns[i]->insertFrom(*current->all_columns[i], current->pos);
|
||||||
|
|
||||||
if (!current->isLast())
|
if (!current->isLast())
|
||||||
{
|
{
|
||||||
|
// std::cerr << "moving to next row\n";
|
||||||
current->next();
|
current->next();
|
||||||
|
|
||||||
if (!queue.empty() && !(current < queue.top()))
|
if (queue.empty() || !(current < queue.top()))
|
||||||
{
|
{
|
||||||
if (count_row_and_check_limit())
|
if (count_row_and_check_limit())
|
||||||
{
|
{
|
||||||
|
// std::cerr << "pushing back to queue\n";
|
||||||
queue.push(current);
|
queue.push(current);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Не кладём курсор обратно в очередь, а продолжаем работать с текущим курсором.
|
/// Не кладём курсор обратно в очередь, а продолжаем работать с текущим курсором.
|
||||||
|
// std::cerr << "current is still on top, using current row\n";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
// std::cerr << "next row is not least, pushing back to queue\n";
|
||||||
queue.push(current);
|
queue.push(current);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/// Достаём из соответствующего источника следующий блок, если есть.
|
/// Достаём из соответствующего источника следующий блок, если есть.
|
||||||
|
// std::cerr << "It was last row, fetching next block\n";
|
||||||
fetchNextBlock(current, queue);
|
fetchNextBlock(current, queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user