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<decltype( iter::imap(MakeEdgeAccessor, *impl_.InEdges(edge_types, view)))> { - 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<storage::EdgeAccessor> 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<decltype( iter::imap(MakeEdgeAccessor, *impl_.OutEdges(edge_types, view)))> { - 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<storage::EdgeAccessor> 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<size_t> InDegree(storage::View view) const {