Skip to content

Commit

Permalink
PartsSplitter small refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
kitaisreal committed Jan 10, 2024
1 parent e87c62e commit cbe3836
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/Processors/QueryPlan/PartsSplitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ struct SplitPartsRangesResult
RangesInDataParts intersecting_parts_ranges;
};

SplitPartsRangesResult splitPartsRanges(RangesInDataParts ranges_in_data_parts, bool force_process_all_ranges)
SplitPartsRangesResult splitPartsRanges(RangesInDataParts ranges_in_data_parts)
{
/** Split ranges in data parts into intersecting ranges in data parts and non intersecting ranges in data parts.
*
Expand Down Expand Up @@ -349,7 +349,7 @@ SplitPartsRangesResult splitPartsRanges(RangesInDataParts ranges_in_data_parts,
if (previous_part_range.event == PartsRangesIterator::EventType::RangeStart)
{
/// If part level is 0, we must process whole previous part because it can contain duplicate primary keys
if (force_process_all_ranges || ranges_in_data_parts[previous_part_range.part_index].data_part->info.level == 0)
if (ranges_in_data_parts[previous_part_range.part_index].data_part->info.level == 0)
continue;

/// Case 1 Range Start after Range Start
Expand Down Expand Up @@ -384,7 +384,7 @@ SplitPartsRangesResult splitPartsRanges(RangesInDataParts ranges_in_data_parts,
MarkRange other_interval_range = other_interval_it->second;

/// If part level is 0, we must process whole other intersecting part because it can contain duplicate primary keys
if (force_process_all_ranges || ranges_in_data_parts[other_interval_part_index].data_part->info.level == 0)
if (ranges_in_data_parts[other_interval_part_index].data_part->info.level == 0)
continue;

/// Case 2 Range Start after Range End
Expand Down Expand Up @@ -419,7 +419,7 @@ SplitPartsRangesResult splitPartsRanges(RangesInDataParts ranges_in_data_parts,
*
* If part level is 0, we must process whole part because it can contain duplicate primary keys.
*/
if (intersecting_parts != 1 || force_process_all_ranges || ranges_in_data_parts[current_part_range.part_index].data_part->info.level == 0)
if (intersecting_parts != 1 || ranges_in_data_parts[current_part_range.part_index].data_part->info.level == 0)
{
add_intersecting_range(current_part_range.part_index, part_index_start_to_range[current_part_range.part_index]);
part_index_start_to_range.erase(current_part_range.part_index);
Expand Down Expand Up @@ -719,10 +719,16 @@ SplitPartsWithRangesByPrimaryKeyResult splitPartsWithRangesByPrimaryKey(

SplitPartsWithRangesByPrimaryKeyResult result;

SplitPartsRangesResult split_result = splitPartsRanges(std::move(parts), force_process_all_ranges);
result.non_intersecting_parts_ranges = std::move(split_result.non_intersecting_parts_ranges);
RangesInDataParts intersecting_parts_ranges = std::move(parts);

auto && [layers, borders] = splitIntersectingPartsRangesIntoLayers(std::move(split_result.intersecting_parts_ranges), max_layers);
if (!force_process_all_ranges)
{
SplitPartsRangesResult split_result = splitPartsRanges(std::move(parts));
result.non_intersecting_parts_ranges = std::move(split_result.non_intersecting_parts_ranges);
intersecting_parts_ranges = std::move(split_result.intersecting_parts_ranges);
}

auto && [layers, borders] = splitIntersectingPartsRangesIntoLayers(intersecting_parts_ranges, max_layers);
auto filters = buildFilters(primary_key, borders);
result.merging_pipes.resize(layers.size());

Expand Down

0 comments on commit cbe3836

Please sign in to comment.