More unnesting

This commit is contained in:
2024-02-22 15:50:54 -08:00
parent 3c93b9a3ce
commit 7a8233ac61

View File

@@ -967,10 +967,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
}
int c = getChildGeq(n, remaining[0]);
if (c == remaining[0]) {
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
} else {
if (c != remaining[0]) {
if (c >= 0) {
n = getChildExists(n, c);
goto downLeftSpine;
@@ -980,6 +977,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
}
}
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) {
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
@@ -1065,11 +1065,7 @@ struct CheckRangeLeftSide {
}
int c = getChildGeq(n, remaining[0]);
if (c == remaining[0]) {
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen;
} else {
if (c != remaining[0]) {
if (c >= 0) {
if (searchPathLen < prefixLen) {
n = getChildExists(n, c);
@@ -1084,6 +1080,10 @@ struct CheckRangeLeftSide {
}
}
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen;
if (n->partialKeyLen > 0) {
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
int i = longestCommonPrefix(n->partialKey, remaining.data(), commonLen);
@@ -1206,11 +1206,7 @@ struct CheckRangeRightSide {
}
int c = getChildGeq(n, remaining[0]);
if (c == remaining[0]) {
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen;
} else {
if (c != remaining[0]) {
if (c >= 0) {
n = getChildExists(n, c);
return downLeftSpine();
@@ -1219,6 +1215,10 @@ struct CheckRangeRightSide {
}
}
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
++searchPathLen;
if (n->partialKeyLen > 0) {
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
@@ -1574,27 +1574,28 @@ struct FirstGeqStepwise {
// Not being done implies that n is not the firstGeq
bool step() {
switch (phase) {
case Search:
case Search: {
if (remaining.size() == 0) {
int c = getChildGeq(n, 0);
assert(c >= 0);
n = getChildExists(n, c);
return downLeftSpine();
} else {
int c = getChildGeq(n, remaining[0]);
if (c == remaining[0]) {
}
int c = getChildGeq(n, remaining[0]);
if (c != remaining[0]) {
if (c >= 0) {
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
return downLeftSpine();
} else {
if (c >= 0) {
n = getChildExists(n, c);
return downLeftSpine();
} else {
n = nextSibling(n);
return downLeftSpine();
}
n = nextSibling(n);
return downLeftSpine();
}
}
n = getChildExists(n, c);
remaining = remaining.subspan(1, remaining.size() - 1);
if (n->partialKeyLen > 0) {
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
@@ -1618,6 +1619,7 @@ struct FirstGeqStepwise {
return downLeftSpine();
}
}
}
[[fallthrough]];
case Init:
phase = Search;