%%{init: {'themeVariables': { 'fontSize': '12px'}}}%%
graph TD
    classDef path fill:#eee,stroke:#000,color:#000
    classDef plan fill:#fff,stroke-width:1px,color:#000
    classDef itemplan fill:#fff,stroke-width:2px,color:#000
    classDef unbatchedplan fill:#dff,stroke-width:1px,color:#000
    classDef sideeffectplan fill:#fcc,stroke-width:2px,color:#000
    classDef bucket fill:#f6f6f6,color:#000,stroke-width:2px,text-align:left


    %% plan dependencies
    Object14{{"Object[14∈0]<br />ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan
    Access12{{"Access[12∈0]<br />ᐸ3.pgSettingsᐳ"}}:::plan
    Access13{{"Access[13∈0]<br />ᐸ3.withPgClientᐳ"}}:::plan
    Access12 & Access13 --> Object14
    PgSelect11[["PgSelect[11∈0]<br />ᐸforumsᐳ"]]:::plan
    Object14 --> PgSelect11
    __Value3["__Value[3∈0]<br />ᐸcontextᐳ"]:::plan
    __Value3 --> Access12
    __Value3 --> Access13
    Connection28{{"Connection[28∈0]<br />ᐸ24ᐳ"}}:::plan
    Constant77{{"Constant[77∈0]<br />ᐸ2ᐳ"}}:::plan
    Constant77 --> Connection28
    __Value0["__Value[0∈0]"]:::plan
    __Value5["__Value[5∈0]<br />ᐸrootValueᐳ"]:::plan
    __Item15[/"__Item[15∈1]<br />ᐸ11ᐳ"\]:::itemplan
    PgSelect11 ==> __Item15
    PgSelectSingle16{{"PgSelectSingle[16∈1]<br />ᐸforumsᐳ"}}:::plan
    __Item15 --> PgSelectSingle16
    Constant58{{"Constant[58∈1]<br />ᐸfalseᐳ"}}:::plan
    PgClassExpression17{{"PgClassExpression[17∈2]<br />ᐸ__forums__.”name”ᐳ"}}:::plan
    PgSelectSingle16 --> PgClassExpression17
    PgSelect29[["PgSelect[29∈3]<br />ᐸmessages+1ᐳ"]]:::plan
    PgClassExpression23{{"PgClassExpression[23∈3]<br />ᐸ__forums__.”id”ᐳ"}}:::plan
    Object14 & PgClassExpression23 & Connection28 --> PgSelect29
    PgSelect73[["PgSelect[73∈3]<br />ᐸmessages(aggregate)ᐳ"]]:::plan
    Object14 & PgClassExpression23 & Connection28 --> PgSelect73
    PgSelectSingle16 --> PgClassExpression23
    PgPageInfo57{{"PgPageInfo[57∈3]"}}:::plan
    Connection28 --> PgPageInfo57
    Access60{{"Access[60∈3]<br />ᐸ29.hasMoreᐳ"}}:::plan
    PgSelect29 --> Access60
    First62{{"First[62∈3]"}}:::plan
    PgSelect29 --> First62
    PgSelectSingle63{{"PgSelectSingle[63∈3]<br />ᐸmessagesᐳ"}}:::plan
    First62 --> PgSelectSingle63
    PgCursor64{{"PgCursor[64∈3]"}}:::plan
    List66{{"List[66∈3]<br />ᐸ65ᐳ"}}:::plan
    List66 --> PgCursor64
    PgClassExpression65{{"PgClassExpression[65∈3]<br />ᐸ__messages__.”id”ᐳ"}}:::plan
    PgSelectSingle63 --> PgClassExpression65
    PgClassExpression65 --> List66
    Last68{{"Last[68∈3]"}}:::plan
    PgSelect29 --> Last68
    PgSelectSingle69{{"PgSelectSingle[69∈3]<br />ᐸmessagesᐳ"}}:::plan
    Last68 --> PgSelectSingle69
    PgCursor70{{"PgCursor[70∈3]"}}:::plan
    List72{{"List[72∈3]<br />ᐸ71ᐳ"}}:::plan
    List72 --> PgCursor70
    PgClassExpression71{{"PgClassExpression[71∈3]<br />ᐸ__messages__.”id”ᐳ"}}:::plan
    PgSelectSingle69 --> PgClassExpression71
    PgClassExpression71 --> List72
    First74{{"First[74∈3]"}}:::plan
    PgSelect73 --> First74
    PgSelectSingle75{{"PgSelectSingle[75∈3]<br />ᐸmessagesᐳ"}}:::plan
    First74 --> PgSelectSingle75
    PgClassExpression76{{"PgClassExpression[76∈3]<br />ᐸcount(*)ᐳ"}}:::plan
    PgSelectSingle75 --> PgClassExpression76
    __Item30[/"__Item[30∈4]<br />ᐸ29ᐳ"\]:::itemplan
    PgSelect29 ==> __Item30
    PgSelectSingle31{{"PgSelectSingle[31∈4]<br />ᐸmessagesᐳ"}}:::plan
    __Item30 --> PgSelectSingle31
    PgSelect34[["PgSelect[34∈5]<br />ᐸusersᐳ"]]:::plan
    PgClassExpression33{{"PgClassExpression[33∈5]<br />ᐸ__messages...author_id”ᐳ"}}:::plan
    Object14 & PgClassExpression33 --> PgSelect34
    PgClassExpression32{{"PgClassExpression[32∈5]<br />ᐸ__messages__.”body”ᐳ"}}:::plan
    PgSelectSingle31 --> PgClassExpression32
    PgSelectSingle31 --> PgClassExpression33
    First38{{"First[38∈5]"}}:::plan
    PgSelect34 --> First38
    PgSelectSingle39{{"PgSelectSingle[39∈5]<br />ᐸusersᐳ"}}:::plan
    First38 --> PgSelectSingle39
    PgClassExpression40{{"PgClassExpression[40∈6]<br />ᐸ__users__.”username”ᐳ"}}:::plan
    PgSelectSingle39 --> PgClassExpression40
    PgClassExpression41{{"PgClassExpression[41∈6]<br />ᐸ__users__....vatar_url”ᐳ"}}:::plan
    PgSelectSingle39 --> PgClassExpression41
    PgSelect49[["PgSelect[49∈7]<br />ᐸusersᐳ"]]:::plan
    PgClassExpression48{{"PgClassExpression[48∈7]<br />ᐸ__messages...author_id”ᐳ"}}:::plan
    Object14 & PgClassExpression48 --> PgSelect49
    PgCursor44{{"PgCursor[44∈7]"}}:::plan
    List46{{"List[46∈7]<br />ᐸ45ᐳ"}}:::plan
    List46 --> PgCursor44
    PgClassExpression45{{"PgClassExpression[45∈7]<br />ᐸ__messages__.”id”ᐳ"}}:::plan
    PgSelectSingle31 --> PgClassExpression45
    PgClassExpression45 --> List46
    PgClassExpression47{{"PgClassExpression[47∈7]<br />ᐸ__messages__.”body”ᐳ"}}:::plan
    PgSelectSingle31 --> PgClassExpression47
    PgSelectSingle31 --> PgClassExpression48
    First53{{"First[53∈7]"}}:::plan
    PgSelect49 --> First53
    PgSelectSingle54{{"PgSelectSingle[54∈7]<br />ᐸusersᐳ"}}:::plan
    First53 --> PgSelectSingle54
    PgClassExpression55{{"PgClassExpression[55∈8]<br />ᐸ__users__.”username”ᐳ"}}:::plan
    PgSelectSingle54 --> PgClassExpression55
    PgClassExpression56{{"PgClassExpression[56∈8]<br />ᐸ__users__....vatar_url”ᐳ"}}:::plan
    PgSelectSingle54 --> PgClassExpression56

    %% define steps

    subgraph "Buckets for queries/connections/pagination-when-inlined-backwards"
    Bucket0("Bucket 0 (root)<br />1: <br />ᐳ: 12, 13, 77, 14, 28<br />2: PgSelect[11]"):::bucket
    classDef bucket0 stroke:#696969
    class Bucket0,__Value0,__Value3,__Value5,PgSelect11,Access12,Access13,Object14,Connection28,Constant77 bucket0
    Bucket1("Bucket 1 (listItem)<br />Deps: 14, 28<br /><br />ROOT __Item{1}ᐸ11ᐳ[15]"):::bucket
    classDef bucket1 stroke:#00bfff
    class Bucket1,__Item15,PgSelectSingle16,Constant58 bucket1
    Bucket2("Bucket 2 (nullableBoundary)<br />Deps: 14, 28, 58, 16<br /><br />ROOT PgSelectSingle{1}ᐸforumsᐳ[16]"):::bucket
    classDef bucket2 stroke:#7f007f
    class Bucket2,PgClassExpression17 bucket2
    Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 14, 28, 58, 16<br /><br />ROOT Connectionᐸ24ᐳ[28]<br />1: <br />ᐳ: PgClassExpression[23], PgPageInfo[57]<br />2: PgSelect[29], PgSelect[73]<br />ᐳ: 60, 62, 63, 65, 66, 68, 69, 71, 72, 74, 75, 76, 64, 70"):::bucket
    classDef bucket3 stroke:#ffa500
    class Bucket3,PgClassExpression23,PgSelect29,PgPageInfo57,Access60,First62,PgSelectSingle63,PgCursor64,PgClassExpression65,List66,Last68,PgSelectSingle69,PgCursor70,PgClassExpression71,List72,PgSelect73,First74,PgSelectSingle75,PgClassExpression76 bucket3
    Bucket4("Bucket 4 (listItem)<br />Deps: 14<br /><br />ROOT __Item{4}ᐸ29ᐳ[30]"):::bucket
    classDef bucket4 stroke:#0000ff
    class Bucket4,__Item30,PgSelectSingle31 bucket4
    Bucket5("Bucket 5 (nullableBoundary)<br />Deps: 14, 31<br /><br />ROOT PgSelectSingle{4}ᐸmessagesᐳ[31]<br />1: <br />ᐳ: 32, 33<br />2: PgSelect[34]<br />ᐳ: First[38], PgSelectSingle[39]"):::bucket
    classDef bucket5 stroke:#7fff00
    class Bucket5,PgClassExpression32,PgClassExpression33,PgSelect34,First38,PgSelectSingle39 bucket5
    Bucket6("Bucket 6 (nullableBoundary)<br />Deps: 39<br /><br />ROOT PgSelectSingle{5}ᐸusersᐳ[39]"):::bucket
    classDef bucket6 stroke:#ff1493
    class Bucket6,PgClassExpression40,PgClassExpression41 bucket6
    Bucket7("Bucket 7 (nullableBoundary)<br />Deps: 14, 31<br /><br />ROOT PgSelectSingle{4}ᐸmessagesᐳ[31]<br />1: <br />ᐳ: 45, 47, 48, 46, 44<br />2: PgSelect[49]<br />ᐳ: First[53], PgSelectSingle[54]"):::bucket
    classDef bucket7 stroke:#808000
    class Bucket7,PgCursor44,PgClassExpression45,List46,PgClassExpression47,PgClassExpression48,PgSelect49,First53,PgSelectSingle54 bucket7
    Bucket8("Bucket 8 (nullableBoundary)<br />Deps: 54<br /><br />ROOT PgSelectSingle{7}ᐸusersᐳ[54]"):::bucket
    classDef bucket8 stroke:#dda0dd
    class Bucket8,PgClassExpression55,PgClassExpression56 bucket8
    Bucket0 --> Bucket1
    Bucket1 --> Bucket2
    Bucket2 --> Bucket3
    Bucket3 --> Bucket4
    Bucket4 --> Bucket5 & Bucket7
    Bucket5 --> Bucket6
    Bucket7 --> Bucket8
    classDef unary fill:#fafffa,borderWidth:8px
    class Object14,PgSelect11,Access12,Access13,Connection28,__Value0,__Value3,__Value5,Constant77,Constant58,PgPageInfo57 unary
    end
