mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Merge
This commit is contained in:
parent
5ffd4898e8
commit
9716ef7b34
@ -30,6 +30,8 @@ public:
|
||||
ordered_names{column_names},
|
||||
min_bytes_to_use_direct_io(min_bytes_to_use_direct_io_), max_read_buffer_size(max_read_buffer_size_)
|
||||
{
|
||||
/** @note можно было бы просто поменять местами reverse в if и else ветках MergeTreeDataSelectExecutor,
|
||||
* а этот reverse убрать. */
|
||||
std::reverse(remaining_mark_ranges.begin(), remaining_mark_ranges.end());
|
||||
|
||||
/// inject columns required for defaults evaluation
|
||||
|
@ -15,7 +15,8 @@ struct MergeTreeReadTask
|
||||
{
|
||||
/// data part which should be read while performing this task
|
||||
MergeTreeData::DataPartPtr data_part;
|
||||
/// ranges to read from `data_part`
|
||||
/** Ranges to read from `data_part`.
|
||||
* Specified in reverse order for MergeTreeThreadBlockInputStream's convenience of calling .pop_back(). */
|
||||
MarkRanges mark_ranges;
|
||||
/// for virtual `part_index` virtual column
|
||||
std::size_t part_index_in_query;
|
||||
@ -103,6 +104,8 @@ public:
|
||||
{
|
||||
const auto marks_to_get_from_range = marks_in_part;
|
||||
|
||||
/** Отрезки уже перечислены справа налево, reverse изначально сделан в MergeTreeDataSelectExecutor и
|
||||
* поддержан в fillPerThreadInfo. */
|
||||
ranges_to_get_from_part = thread_task.ranges;
|
||||
|
||||
marks_in_part -= marks_to_get_from_range;
|
||||
@ -135,7 +138,9 @@ public:
|
||||
need_marks -= marks_to_get_from_range;
|
||||
}
|
||||
|
||||
/// Восстановим порядкок отрезков.
|
||||
/** Перечислим справа налево, чтобы MergeTreeThreadBlockInputStream забирал
|
||||
* отрезки с помощью .pop_back() (их порядок был сменен на "слева направо"
|
||||
* из-за .pop_back() в этой ветке). */
|
||||
std::reverse(std::begin(ranges_to_get_from_part), std::end(ranges_to_get_from_part));
|
||||
}
|
||||
|
||||
@ -269,7 +274,7 @@ public:
|
||||
/// Возьмем весь кусок, если он достаточно мал.
|
||||
if (marks_in_part <= need_marks)
|
||||
{
|
||||
/// Оставим отрезки перечисленными справа налево для удобства.
|
||||
/// Оставим отрезки перечисленными справа налево для удобства использования .pop_back() в .getTask()
|
||||
ranges_to_get_from_part = part.ranges;
|
||||
marks_in_ranges = marks_in_part;
|
||||
|
||||
@ -298,7 +303,9 @@ public:
|
||||
part.ranges.pop_back();
|
||||
}
|
||||
|
||||
/// Вновь перечислим отрезки справа налево, чтобы .getTask() мог забирать их с помощью .pop_back().
|
||||
/** Вновь перечислим отрезки справа налево, чтобы .getTask() мог забирать их
|
||||
* с помощью .pop_back() (их порядок был сменен на "слева направо"
|
||||
* из-за .pop_back() в этой ветке). */
|
||||
std::reverse(std::begin(ranges_to_get_from_part), std::end(ranges_to_get_from_part));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user