We're already doing this in checkRangeStartsWith
This commit is contained in:
2024-08-07 16:51:23 -07:00
parent 2fa954ed36
commit 7d86beb14c

View File

@@ -2795,38 +2795,13 @@ bool checkRangeRead(Node *n, std::span<const uint8_t> begin,
} }
auto [child, v] = getChildAndMaxVersion(n, remaining[0]); auto [child, v] = getChildAndMaxVersion(n, remaining[0]);
if (child == nullptr) { if (child == nullptr) {
auto c = getChildGeq(n, remaining[0]); break;
if (c != nullptr) {
n = c;
goto downLeftSpine;
} else {
n = nextSibling(n);
if (n == nullptr) {
return true;
}
goto downLeftSpine;
}
} }
if (child->partialKeyLen > 0) { if (child->partialKeyLen > 0) {
int cl = std::min<int>(child->partialKeyLen, remaining.size() - 1); int cl = std::min<int>(child->partialKeyLen, remaining.size() - 1);
int i = int i =
longestCommonPrefix(child->partialKey(), remaining.data() + 1, cl); longestCommonPrefix(child->partialKey(), remaining.data() + 1, cl);
if (i < cl) {
auto c = child->partialKey()[i] <=> remaining[1 + i];
if (c > 0) {
n = child;
goto downLeftSpine;
} else {
n = nextSibling(child);
if (n == nullptr) {
return true;
}
goto downLeftSpine;
}
}
// If the partial key is longer than the common prefix (remaining), we
// still need to keep searching
if (i != child->partialKeyLen) { if (i != child->partialKeyLen) {
break; break;
} }
@@ -2842,12 +2817,6 @@ bool checkRangeRead(Node *n, std::span<const uint8_t> begin,
} }
assert(getSearchPath(arena, n) <=> begin.subspan(0, lcp - remaining.size()) == assert(getSearchPath(arena, n) <=> begin.subspan(0, lcp - remaining.size()) ==
0); 0);
if (0) {
downLeftSpine:
for (; !n->entryPresent; n = getFirstChildExists(n)) {
}
return n->entry.rangeVersion <= readVersion;
}
const int consumed = lcp - remaining.size(); const int consumed = lcp - remaining.size();
assume(consumed >= 0); assume(consumed >= 0);