mvcc: Optimize partition_snapshot::range_tombstones() for single version case

This commit is contained in:
Tomasz Grabiec
2017-12-08 10:04:11 +01:00
parent 1303320377
commit 183554cbc4

View File

@@ -566,11 +566,17 @@ lw_shared_ptr<partition_snapshot> partition_entry::read(logalloc::region& r,
std::vector<range_tombstone>
partition_snapshot::range_tombstones(const ::schema& s, position_in_partition_view start, position_in_partition_view end)
{
partition_version* v = &*version();
if (!v->next()) {
return boost::copy_range<std::vector<range_tombstone>>(
v->partition().row_tombstones().slice(s, start, end));
}
range_tombstone_list list(s);
for (auto&& v : versions()) {
for (auto&& rt : v.partition().row_tombstones().slice(s, start, end)) {
while (v) {
for (auto&& rt : v->partition().row_tombstones().slice(s, start, end)) {
list.apply(s, rt);
}
v = v->next();
}
return boost::copy_range<std::vector<range_tombstone>>(list.slice(s, start, end));
}