No it’s a tree which executes parallel at a level and these levels are processed sequential.
So the original query is divided into sub-queries called sub-graphs which have children sub-graphs inside them. This forms a forest of trees in which each node in the tree is a “sub-graph”. Now, query processor tries to run the query for all children of a sub-graph in parallel but these levels are executed recursively hence they are sequential. This parallelisation is achieved using go routines.
Also, filters in a sub-graph are also processed in parallel.
So in your example,
var(func: eq(shortName, $dict)) {
~dict @filter(eq(dgraph.type, "Meaning")) {
MEANING_UID as uid
}
}
and
var(func: eq(shortName, $dict)) {
~dict @filter(eq(dgraph.type, "Word")) {
WORD_UID as uid
}
}
would be parallel and
meaning @filter(uid(MEANING_UID)) {
translation @filter(uid(WORD_UID)) {
content
}
}
the 2 filters in this part will be sequential because @filter(uid(WORD_UID)) is in the subgraph of a child of meaning predicate.