From 29590f11129d6641b93d55e5edeb8420518bbc71 Mon Sep 17 00:00:00 2001 From: Matej Ferencevic Date: Mon, 18 Nov 2019 17:30:11 +0100 Subject: [PATCH] Implement edge iteration with known destination Reviewers: teon.banek Reviewed By: teon.banek Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D2553 --- src/query/db_accessor.hpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/query/db_accessor.hpp b/src/query/db_accessor.hpp index 296bcfd91..02b935325 100644 --- a/src/query/db_accessor.hpp +++ b/src/query/db_accessor.hpp @@ -137,7 +137,16 @@ class VertexAccessor final { const VertexAccessor &dest) const -> storage::Result { - throw utils::NotYetImplemented("InEdges with set destination"); + auto maybe_edges = impl_.InEdges(edge_types, view); + if (maybe_edges.HasError()) return maybe_edges.GetError(); + std::vector reduced_edges; + reduced_edges.reserve(maybe_edges->size()); + for (auto &edge : *maybe_edges) { + if (edge.FromVertex() == dest.impl_) { + reduced_edges.push_back(edge); + } + } + return iter::imap(MakeEdgeAccessor, std::move(reduced_edges)); } auto OutEdges(storage::View view, @@ -156,7 +165,16 @@ class VertexAccessor final { const VertexAccessor &dest) const -> storage::Result { - throw utils::NotYetImplemented("OutEdges with set destination"); + auto maybe_edges = impl_.OutEdges(edge_types, view); + if (maybe_edges.HasError()) return maybe_edges.GetError(); + std::vector reduced_edges; + reduced_edges.reserve(maybe_edges->size()); + for (auto &edge : *maybe_edges) { + if (edge.ToVertex() == dest.impl_) { + reduced_edges.push_back(edge); + } + } + return iter::imap(MakeEdgeAccessor, std::move(reduced_edges)); } storage::Result InDegree(storage::View view) const {