void SingleServerTraversalPath::lastEdgeToVelocyPack(arangodb::Transaction* trx, VPackBuilder& result) { if (_path.edges.empty()) { result.add(arangodb::basics::VelocyPackHelper::NullValue()); return; } auto cached = _traverser->_edges.find(_path.edges.back()); // All edges are cached!! TRI_ASSERT(cached != _traverser->_edges.end()); result.addExternal((*cached).second); }
void SingleServerTraverser::addVertexToVelocyPack(VPackSlice id, VPackBuilder& result) { TRI_ASSERT(id.isString()); auto it = _vertices.find(id); if (it == _vertices.end()) { StringRef ref(id); int res = FetchDocumentById(_trx, ref, *_mmdr); ++_readDocuments; if (res != TRI_ERROR_NO_ERROR) { result.add(basics::VelocyPackHelper::NullValue()); } else { uint8_t const* p = _mmdr->vpack(); _vertices.emplace(id, p); result.addExternal(p); } } else { result.addExternal((*it).second); } }
void SingleServerTraversalPath::pathToVelocyPack(arangodb::Transaction* trx, VPackBuilder& result) { result.openObject(); result.add(VPackValue("edges")); result.openArray(); for (auto const& it : _path.edges) { auto cached = _traverser->_edges.find(it); // All edges are cached!! TRI_ASSERT(cached != _traverser->_edges.end()); result.addExternal((*cached).second); } result.close(); result.add(VPackValue("vertices")); result.openArray(); for (auto const& it : _path.vertices) { result.add(_traverser->fetchVertexData(it).slice()); } result.close(); result.close(); }
void SingleServerTraverser::addEdgeToVelocyPack(VPackSlice edge, VPackBuilder& result) { result.addExternal(edge.begin()); }