digraph interpreter { node [fontname="dejavusansmono"] edge [fontname="dejavusansmono"] node [shape=record] edge [dir=back,arrowtail=empty,arrowsize=1.5] Interpreter [label="{\N|+ operator(query : string, ...) : Results\l| # MakeLogicalPlan(...) : LogicalPlan\l| - plan_cache_ : Map(QueryHash, CachedPlan)\l}"] Interpreter -> DistributedInterpreter Results [label="{\N|+ PullAll(stream) : void\l|- plan_ : CachedPlan\l}"] Interpreter -> Results [dir=forward,style=dashed,arrowhead=open,label="<>"] CachedPlan -> Results [dir=forward,arrowhead=odiamond,taillabel="1",headlabel="*"] Interpreter -> CachedPlan [arrowtail=diamond,taillabel="1",headlabel="*"] CachedPlan -> LogicalPlan [arrowtail=diamond] LogicalPlan [label="{\N|+ GetRoot() : LogicalOperator \l+ GetCost() : double\l}"] LogicalPlan -> SingleNodeLogicalPlan [style=dashed] LogicalPlan -> DistributedLogicalPlan [style=dashed] DistributedInterpreter -> DistributedLogicalPlan [dir=forward,style=dashed,arrowhead=open,label="<>"] }