mirror of https://gitee.com/bigwinds/arangodb
Fixed a bug in ClusterTraverser. Moved a string too early
This commit is contained in:
parent
35bd5c44e4
commit
930b7216b1
|
@ -1499,8 +1499,8 @@ int getFilteredDocumentsOnCoordinator(
|
||||||
for (auto const& e : expressions) {
|
for (auto const& e : expressions) {
|
||||||
e->toVelocyPack(bodyBuilder);
|
e->toVelocyPack(bodyBuilder);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
bodyBuilder.close(); // filter
|
bodyBuilder.close(); // filter
|
||||||
|
}
|
||||||
bodyBuilder.close(); // Object
|
bodyBuilder.close(); // Object
|
||||||
|
|
||||||
auto bodyString = std::make_shared<std::string>(bodyBuilder.toJson());
|
auto bodyString = std::make_shared<std::string>(bodyBuilder.toJson());
|
||||||
|
|
|
@ -145,8 +145,7 @@ void ClusterTraverser::EdgeGetter::operator()(std::string const& startVertex,
|
||||||
_traverser->_readDocuments += read;
|
_traverser->_readDocuments += read;
|
||||||
_traverser->_filteredPaths += filter;
|
_traverser->_filteredPaths += filter;
|
||||||
|
|
||||||
size_t count = static_cast<size_t>(resSlice.length());
|
if (edgesSlice.isNone() || edgesSlice.length() == 0) {
|
||||||
if (count == 0) {
|
|
||||||
last = nullptr;
|
last = nullptr;
|
||||||
eColIdx++;
|
eColIdx++;
|
||||||
operator()(startVertex, result, last, eColIdx, unused);
|
operator()(startVertex, result, last, eColIdx, unused);
|
||||||
|
@ -155,22 +154,22 @@ void ClusterTraverser::EdgeGetter::operator()(std::string const& startVertex,
|
||||||
std::stack<std::string> stack;
|
std::stack<std::string> stack;
|
||||||
std::unordered_set<std::string> verticesToFetch;
|
std::unordered_set<std::string> verticesToFetch;
|
||||||
for (auto const& edge : VPackArrayIterator(edgesSlice)) {
|
for (auto const& edge : VPackArrayIterator(edgesSlice)) {
|
||||||
std::string edgeId =
|
std::string edgeId = arangodb::basics::VelocyPackHelper::getStringValue(
|
||||||
arangodb::basics::VelocyPackHelper::getStringValue(edge, "_id", "");
|
edge, TRI_VOC_ATTRIBUTE_ID, "");
|
||||||
stack.push(std::move(edgeId));
|
|
||||||
std::string fromId = arangodb::basics::VelocyPackHelper::getStringValue(
|
std::string fromId = arangodb::basics::VelocyPackHelper::getStringValue(
|
||||||
edge, "_from", "");
|
edge, TRI_VOC_ATTRIBUTE_FROM, "");
|
||||||
if (_traverser->_vertices.find(fromId) == _traverser->_vertices.end()) {
|
if (_traverser->_vertices.find(fromId) == _traverser->_vertices.end()) {
|
||||||
verticesToFetch.emplace(std::move(fromId));
|
verticesToFetch.emplace(std::move(fromId));
|
||||||
}
|
}
|
||||||
std::string toId =
|
std::string toId = arangodb::basics::VelocyPackHelper::getStringValue(
|
||||||
arangodb::basics::VelocyPackHelper::getStringValue(edge, "_to", "");
|
edge, TRI_VOC_ATTRIBUTE_TO, "");
|
||||||
if (_traverser->_vertices.find(toId) == _traverser->_vertices.end()) {
|
if (_traverser->_vertices.find(toId) == _traverser->_vertices.end()) {
|
||||||
verticesToFetch.emplace(std::move(toId));
|
verticesToFetch.emplace(std::move(toId));
|
||||||
}
|
}
|
||||||
VPackBuilder tmpBuilder;
|
VPackBuilder tmpBuilder;
|
||||||
tmpBuilder.add(edge);
|
tmpBuilder.add(edge);
|
||||||
_traverser->_edges.emplace(edgeId, tmpBuilder.steal());
|
_traverser->_edges.emplace(edgeId, tmpBuilder.steal());
|
||||||
|
stack.push(std::move(edgeId));
|
||||||
}
|
}
|
||||||
|
|
||||||
_traverser->fetchVertices(verticesToFetch, depth + 1);
|
_traverser->fetchVertices(verticesToFetch, depth + 1);
|
||||||
|
|
Loading…
Reference in New Issue