Merge pull request #58506 from kitaisreal/parts-splitter-small-refactoring

PartsSplitter small refactoring
This commit is contained in:
Alexey Milovidov 2024-01-11 17:53:14 +01:00 committed by GitHub
commit 13889a4988
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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.
*
@ -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
@ -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
@ -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);
@ -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(intersecting_parts_ranges);
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());