ClickHouse/src/Storages/MergeTree/MarkRange.cpp
2021-12-09 13:39:28 +03:00

40 lines
1.1 KiB
C++

#include "MarkRange.h"
namespace DB
{
namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
}
bool MarkRange::operator==(const MarkRange & rhs) const
{
return begin == rhs.begin && end == rhs.end;
}
bool MarkRange::operator<(const MarkRange & rhs) const
{
/// We allow only consecutive non-intersecting ranges
/// Here we check whether a beginning of one range lies inside another range
/// (ranges are intersect)
const bool is_intersection = (begin <= rhs.begin && rhs.begin < end) ||
(rhs.begin <= begin && begin < rhs.end);
if (is_intersection)
throw Exception(ErrorCodes::LOGICAL_ERROR,
"Intersecting mark ranges are not allowed, it is a bug! First range ({}, {}), second range ({}, {})", begin, end, rhs.begin, rhs.end);
return begin < rhs.begin && end <= rhs.begin;
}
size_t getLastMark(const MarkRanges & ranges)
{
size_t current_task_last_mark = 0;
for (const auto & mark_range : ranges)
current_task_last_mark = std::max(current_task_last_mark, mark_range.end);
return current_task_last_mark;
}
}