> ## Documentation Index
> Fetch the complete documentation index at: https://gql.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# CALL

CALL statement in GQL invokes a Procedure

## For each node find the number of incoming edges

Suppose we are interested in the number of highways flowing into each of the Highway:

```mermaid theme={null}

%%{init: {'theme':'base', 'themeVariables': {'lineColor':'#F1FA8C','secondaryColor':'#F1FA8C','background':'#282A36'}}}%%
graph TB
    highway1(<b>:freeway 🛣️</b><br/>name: Highway 1)
    highway2(<b>:freeway 🛣️</b><br/>name: Highway 2)
    highway3(<b>:freeway 🛣️</b><br/>name: Highway 3)
    highway4(<b>:freeway 🛣️</b><br/>name: Highway 4)
    highway5(<b>:freeway 🛣️</b><br/>name: Highway 5)
    highway6(<b>:freeway 🛣️</b><br/>name: Highway 6)
    highway7(<b>:freeway 🛣️</b><br/>name: Highway 7)
    highway8(<b>:freeway 🛣️</b><br/>name: Highway 8)
    highway9(<b>:freeway 🛣️</b><br/>name: Highway 9)
    highway10(<b>:freeway 🛣️</b><br/>name: Highway 10)
    highway11(<b>:freeway 🛣️</b><br/>name: Highway 11)
    highway12(<b>:freeway 🛣️</b><br/>name: Highway 12)
    highway13(<b>:freeway 🛣️</b><br/>name: Highway 13)



    highway1 -->|<b>:links_to</b>| highway3
    highway2 -->|<b>:links_to</b>| highway3
    highway3 -->|<b>:links_to</b>| highway4
    highway3 -->|<b>:links_to</b>| highway6
    highway4 -->|<b>:links_to</b>| highway5
    highway6 -->|<b>:links_to</b>| highway7
    highway5 -->|<b>:links_to</b>| highway8
    highway7 -->|<b>:links_to</b>| highway8
    highway9 -->|<b>:links_to</b>| highway10
    highway11 -->|<b>:links_to</b>| highway12
    highway8 -->|<b>:links_to</b>| highway12
    highway10 -->|<b>:links_to</b>| highway12
    highway12 -->|<b>:links_to</b>| highway13



    classDef nodes fill:#BD93F9,stroke-width:0px
    class highway1,highway2,highway3,highway4,highway5,highway6,highway7,highway8,highway9,highway10,highway11,highway12,highway13 nodes
	
```

We can use the CALL statement to invoke and inline procedure as follows:

```gql theme={null}
MATCH nodes = (b)
CALL {
  MATCH path = (a)-[e1:flows_to]->(b)
  return path
    , count(distinct e1) as incoming_nodes_count
    , COLLECT_LIST(distinct a.name) as incoming_nodes
}
return table(b.name, incoming_nodes_count, incoming_nodes)
order by incoming_nodes_count desc;
```

## For each node list paths to all other nodes

We are interested in getting all paths from each to all other nodes:

```mermaid theme={null}

%%{init: {'theme':'base', 'themeVariables': {'lineColor':'#F1FA8C','secondaryColor':'#F1FA8C','background':'#282A36'}}}%%
graph TB
    highway1(<b>:freeway 🛣️</b><br/>name: Highway 1)
    highway2(<b>:freeway 🛣️</b><br/>name: Highway 2)
    highway3(<b>:freeway 🛣️</b><br/>name: Highway 3)
    highway4(<b>:freeway 🛣️</b><br/>name: Highway 4)
    highway5(<b>:freeway 🛣️</b><br/>name: Highway 5)
    highway6(<b>:freeway 🛣️</b><br/>name: Highway 6)
    highway7(<b>:freeway 🛣️</b><br/>name: Highway 7)
    highway8(<b>:freeway 🛣️</b><br/>name: Highway 8)
    highway9(<b>:freeway 🛣️</b><br/>name: Highway 9)
    highway10(<b>:freeway 🛣️</b><br/>name: Highway 10)
    highway11(<b>:freeway 🛣️</b><br/>name: Highway 11)
    highway12(<b>:freeway 🛣️</b><br/>name: Highway 12)
    highway13(<b>:freeway 🛣️</b><br/>name: Highway 13)



    highway1 -->|<b>:links_to</b>| highway3
    highway2 -->|<b>:links_to</b>| highway3
    highway3 -->|<b>:links_to</b>| highway4
    highway3 -->|<b>:links_to</b>| highway6
    highway4 -->|<b>:links_to</b>| highway5
    highway6 -->|<b>:links_to</b>| highway7
    highway5 -->|<b>:links_to</b>| highway8
    highway7 -->|<b>:links_to</b>| highway8
    highway9 -->|<b>:links_to</b>| highway10
    highway11 -->|<b>:links_to</b>| highway12
    highway8 -->|<b>:links_to</b>| highway12
    highway10 -->|<b>:links_to</b>| highway12
    highway12 -->|<b>:links_to</b>| highway13



    classDef nodes fill:#BD93F9,stroke-width:0px
    class highway1,highway2,highway3,highway4,highway5,highway6,highway7,highway8,highway9,highway10,highway11,highway12,highway13 nodes
	
```

```gql theme={null}
MATCH nodes = (a)
CALL {
  MATCH path = (a)-[edges:flows_to]->{0,}(b)
  return reduce(path = a._id, edge in edges | path || '->' || edge._to) as route
  , b
  
}
return table(a.name as starting, b.name as ending, route)

```

## Movie recommendations based on what the 1 degree connection and 2nd degree connection have watched

```mermaid theme={null}

%%{init: {'theme':'base', 'themeVariables': {'lineColor':'#F1FA8C','secondaryColor':'#F1FA8C','background':'#282A36'}}}%%
graph TB

    subgraph row1[" "]
    Maryam(<b>:account 🧕</b><br/>name: Maryam)
    Sara(<b>:account 🧕</b><br/>name: Sara)
    Uroosa(<b>:account 🧕</b><br/>name: Uroosa)
    Fatima(<b>:account 🧕</b><br/>name: Fatima)
    Zainab(<b>:account 🧕</b><br/>name: Zainab)
    Hannah(<b>:account 🧕</b><br/>name: Hannah)
    end

    subgraph row2[" "]
    despicable_me(<b>:movie 🎬</b><br/>name: Despicable Me)
    penguins_of_madagascar(<b>:movie 🎬</b><br/>name: Penguins of Madagascar)
    time_hoppers(<b>:movie 🎬</b><br/>name: Time Hoppers)
    zootopia(<b>:movie 🎬</b><br/>name: Zootopia)
    end


    Sara <-->|<b>:friend</b>| Uroosa
    Uroosa <-->|<b>:friend</b>| Maryam
    Maryam <-->|<b>:friend</b>| Fatima
    Zainab <-->|<b>:friend</b>| Hannah
    Sara -->|<b>:watched 👀</b>| zootopia
    Uroosa -->|<b>:watched 👀</b>| penguins_of_madagascar
    Maryam -->|<b>:watched 👀</b>| time_hoppers
    Fatima -->|<b>:watched 👀</b>| time_hoppers
    Zainab -->|<b>:watched 👀</b>| time_hoppers
    Fatima -->|<b>:watched 👀</b>| despicable_me
    Hannah -->|<b>:watched 👀</b>| despicable_me



    classDef nodes fill:#BD93F9,stroke-width:0px
    class Maryam,Sara,Uroosa,Fatima,Hannah,Zainab,highway7,highway8,highway9,highway10,highway11,highway12,highway13 nodes
    
    classDef subgraphStyle fill:#282A36, stroke-width:0px
    class row1,row2,row3 subgraphStyle

```

Recommend movies based on what account 1st and 2nd degree connection have watched:

```gql theme={null}
MATCH friends = ALL  (account_a)-[:friends]->{0,2}(account_b)
CALL {
  MATCH path = (account_a)-[:watched]->(movie_a)
    , (account_b)-[:watched]->(movie_b)
  FILTER account_a <> account_b and movie_a <> movie_b
  return path
    , COLLECT_LIST(distinct movie_a.title) as recommended_movies
}
FILTER account_a <> account_b
return table(account_a.name, account_b.name, recommended_movies);
```
