 # Check if edge (u, v) exists in the graph

I wonder if there is an easy way of checking if an edge between two given vertices, u and v, exists in a graph.

It would be great if, as an extension, we could also specify the type or types for the edge we are looking for (commonly named `e_types` in GSQL queries).

Here is a solution.

``````create query check_edges_exist(vertex u,vertex v,set<string> edges) for graph test{
MapAccum<string,bool> @@result;
start = {u};
l = select s from start:s post-accum
foreach one_edge in edges do
if s.neighbors(one_edge).contains(v)
then @@result += (one_edge->True)
else @@result += (one_edge->False)
end
end;
print @@result;

}
``````
1 Like

Another way (untested, just thinking in my head):

``````CREATE QUERY check_edges_exist(VERTEX u, VERTEX v, SET<STRING> e_types) {
OrAccum @@found;
Start = {u};
Result = SELECT s FROM Start:s -(e_types:e)- :t
WHERE t == v
ACCUM @@found += True;

PRINT @@found;
}``````
1 Like

Thanks a lot for both solutions. Is there any difference between using BOOL and OrAccum? This is another approach:

``````CREATE QUERY edge_exists(VERTEX u, VERTEX v, SET<STRING> e_types) FOR GRAPH demo_fc_graph RETURNS (BOOL) {
BOOL exists = FALSE;

Start = { u };
check = SELECT s FROM Start:s -(e_types)-> :t
ACCUM IF t == v THEN exists = TRUE END;

RETURN exists;
}``````