1
0
Fork 0

Fixed a bug in ClusterTraverser. Moved a string too early

This commit is contained in:
Michael Hackstein 2016-04-18 09:29:46 +02:00
parent 35bd5c44e4
commit 930b7216b1
2 changed files with 9 additions and 10 deletions

View File

@ -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());

View File

@ -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);