aboutsummaryrefslogblamecommitdiffstats
path: root/docs/query-execution-flow.puml
blob: 998b0e20c9801079a73953e8778eaafa1d7e6991 (plain) (tree)





















































                                                                                        
@startuml query-execution-flow
!theme plain
title Query Execution Flow

actor Client
participant "Query Planner" as Planner
participant "Scan Iterator" as Scan
participant "Select Iterator" as Select
participant "Project Iterator" as Project
participant "Operations API" as Ops
database "Mnesia" as DB

Client -> Planner: query({project,\n  {select, {scan, employee}, Pred},\n  [name, age]})
activate Planner
Planner -> Planner: parse & validate
Planner -> Scan: spawn_iterator(employee)
activate Scan
Planner -> Select: spawn_iterator(Scan, Pred)
activate Select
Planner -> Project: spawn_iterator(Select, [name, age])
activate Project
Planner --> Client: {ok, Iterator}
deactivate Planner

Client -> Project: next_tuple()
Project -> Select: next_tuple()
Select -> Scan: next_tuple()
Scan -> Ops: get_tuples_iterator(employee)
Ops -> DB: transaction(read tuple)
DB --> Ops: {ok, Tuple}
Ops --> Scan: {ok, Tuple}
Scan --> Select: {ok, Tuple}
Select -> Select: apply Predicate
Select --> Project: {ok, Tuple}
Project -> Project: filter attributes
Project --> Client: {ok, #{name => "Alice", age => 30}}

Client -> Project: next_tuple()
Project -> Select: next_tuple()
Select -> Scan: next_tuple()
Scan -> Ops: get_tuples_iterator(employee)
Ops -> DB: transaction(read tuple)
DB --> Ops: done
Ops --> Scan: done
Scan --> Select: done
Select --> Project: done
Project --> Client: done

Client -> Project: close_iterator()
deactivate Project
deactivate Select
deactivate Scan

@enduml