%%{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
    Object12{{"Object[12∈0] ➊<br />ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan
    Access10{{"Access[10∈0] ➊<br />ᐸ2.pgSettingsᐳ"}}:::plan
    Access11{{"Access[11∈0] ➊<br />ᐸ2.withPgClientᐳ"}}:::plan
    Access10 & Access11 --> Object12
    __InputObject23{{"__InputObject[23∈0] ➊"}}:::plan
    Constant63{{"Constant[63∈0] ➊<br />ᐸ'AWfulS'ᐳ"}}:::plan
    Constant63 --> __InputObject23
    Connection29{{"Connection[29∈0] ➊<br />ᐸ25ᐳ"}}:::plan
    Constant61{{"Constant[61∈0] ➊<br />ᐸ1ᐳ"}}:::plan
    Lambda30{{"Lambda[30∈0] ➊<br />ᐸparseCursorᐳ"}}:::plan
    Constant61 & Lambda30 --> Connection29
    __Value2["__Value[2∈0] ➊<br />ᐸcontextᐳ"]:::plan
    __Value2 --> Access10
    __Value2 --> Access11
    Connection13{{"Connection[13∈0] ➊<br />ᐸ9ᐳ"}}:::plan
    Constant60{{"Constant[60∈0] ➊<br />ᐸ4ᐳ"}}:::plan
    Constant60 --> Connection13
    Constant62{{"Constant[62∈0] ➊<br />ᐸ'WyI0OTgwM2MxZTJiIiwiQXdzQXBwbGljYXRpb24iLCJbXCI0XCJdIl0='ᐳ"}}:::plan
    Constant62 --> Lambda30
    ApplyInput31{{"ApplyInput[31∈0] ➊"}}:::plan
    __InputObject23 --> ApplyInput31
    __Value4["__Value[4∈0] ➊<br />ᐸrootValueᐳ"]:::plan
    PgSelect15[["PgSelect[15∈1] ➊<br />ᐸpeopleᐳ"]]:::plan
    Object12 & Connection13 & Constant60 --> PgSelect15
    PgSelectRows16[["PgSelectRows[16∈1] ➊"]]:::plan
    PgSelect15 --> PgSelectRows16
    __Item17[/"__Item[17∈2]<br />ᐸ16ᐳ"\]:::itemplan
    PgSelectRows16 ==> __Item17
    PgSelectSingle18{{"PgSelectSingle[18∈2]<br />ᐸpeopleᐳ"}}:::plan
    __Item17 --> PgSelectSingle18
    PgUnionAll32[["PgUnionAll[32∈3]"]]:::plan
    PgClassExpression19{{"PgClassExpression[19∈3]<br />ᐸ__people__.”person_id”ᐳ"}}:::plan
    Object12 & PgClassExpression19 & ApplyInput31 & Connection29 & Lambda30 & Constant61 --> PgUnionAll32
    PgSelectSingle18 --> PgClassExpression19
    PgClassExpression20{{"PgClassExpression[20∈3]<br />ᐸ__people__.”username”ᐳ"}}:::plan
    PgSelectSingle18 --> PgClassExpression20
    Access59{{"Access[59∈3]<br />ᐸ32.itemsᐳ"}}:::plan
    PgUnionAll32 --> Access59
    __Item34[/"__Item[34∈4]<br />ᐸ59ᐳ"\]:::itemplan
    Access59 ==> __Item34
    PgUnionAllSingle35["PgUnionAllSingle[35∈4]"]:::plan
    __Item34 --> PgUnionAllSingle35
    Access36{{"Access[36∈4]<br />ᐸ32.cursorDetailsᐳ"}}:::plan
    PgUnionAll32 --> Access36
    PgCursor37{{"PgCursor[37∈5]"}}:::plan
    PgUnionAllSingle35 & Access36 --> PgCursor37
    Access38{{"Access[38∈5]<br />ᐸ35.1ᐳ"}}:::plan
    PgUnionAllSingle35 --> Access38
    PgSelect41[["PgSelect[41∈6]<br />ᐸaws_applicationsᐳ<br />ᐳAwsApplication"]]:::plan
    Access40{{"Access[40∈6]^<br />ᐸ39.0ᐳ"}}:::plan
    Object12 & Access40 --> PgSelect41
    PgSelect52[["PgSelect[52∈6]<br />ᐸgcp_applicationsᐳ<br />ᐳGcpApplication"]]:::plan
    Object12 & Access40 --> PgSelect52
    JSONParse39[["JSONParse[39∈6]<br />ᐸ38ᐳ<br />ᐳAwsApplication<br />ᐳGcpApplication"]]:::plan
    Access38 --> JSONParse39
    JSONParse39 --> Access40
    First45{{"First[45∈6]^"}}:::plan
    PgSelectRows46[["PgSelectRows[46∈6]^"]]:::plan
    PgSelectRows46 --> First45
    PgSelect41 --> PgSelectRows46
    PgSelectSingle47{{"PgSelectSingle[47∈6]^<br />ᐸaws_applicationsᐳ"}}:::plan
    First45 --> PgSelectSingle47
    PgClassExpression48{{"PgClassExpression[48∈6]^<br />ᐸ__aws_appl...ons__.”id”ᐳ"}}:::plan
    PgSelectSingle47 --> PgClassExpression48
    PgClassExpression49{{"PgClassExpression[49∈6]^<br />ᐸ__aws_appl...s__.”name”ᐳ"}}:::plan
    PgSelectSingle47 --> PgClassExpression49
    First54{{"First[54∈6]^"}}:::plan
    PgSelectRows55[["PgSelectRows[55∈6]^"]]:::plan
    PgSelectRows55 --> First54
    PgSelect52 --> PgSelectRows55
    PgSelectSingle56{{"PgSelectSingle[56∈6]^<br />ᐸgcp_applicationsᐳ"}}:::plan
    First54 --> PgSelectSingle56
    PgClassExpression57{{"PgClassExpression[57∈6]^<br />ᐸ__gcp_appl...ons__.”id”ᐳ"}}:::plan
    PgSelectSingle56 --> PgClassExpression57
    PgClassExpression58{{"PgClassExpression[58∈6]^<br />ᐸ__gcp_appl...s__.”name”ᐳ"}}:::plan
    PgSelectSingle56 --> PgClassExpression58

    %% define steps

    subgraph "Buckets for queries/polymorphic/person-app-vulns.app-condition"
    Bucket0("Bucket 0 (root)"):::bucket
    classDef bucket0 stroke:#696969
    class Bucket0,__Value2,__Value4,Access10,Access11,Object12,Connection13,__InputObject23,Connection29,Lambda30,ApplyInput31,Constant60,Constant61,Constant62,Constant63 bucket0
    Bucket1("Bucket 1 (nullableBoundary)<br />Deps: 12, 13, 60, 31, 29, 30, 61<br /><br />ROOT Connectionᐸ9ᐳ[13]<br />1: PgSelect[15]<br />2: PgSelectRows[16]"):::bucket
    classDef bucket1 stroke:#00bfff
    class Bucket1,PgSelect15,PgSelectRows16 bucket1
    Bucket2("Bucket 2 (listItem)<br />Deps: 12, 31, 29, 30, 61<br /><br />ROOT __Item{2}ᐸ16ᐳ[17]"):::bucket
    classDef bucket2 stroke:#7f007f
    class Bucket2,__Item17,PgSelectSingle18 bucket2
    Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 18, 12, 31, 29, 30, 61<br /><br />ROOT PgSelectSingle{2}ᐸpeopleᐳ[18]<br />1: <br />ᐳ: 19, 20<br />2: PgUnionAll[32]<br />ᐳ: Access[59]"):::bucket
    classDef bucket3 stroke:#ffa500
    class Bucket3,PgClassExpression19,PgClassExpression20,PgUnionAll32,Access59 bucket3
    Bucket4("Bucket 4 (listItem)<br />Deps: 32, 12<br /><br />ROOT __Item{4}ᐸ59ᐳ[34]"):::bucket
    classDef bucket4 stroke:#0000ff
    class Bucket4,__Item34,PgUnionAllSingle35,Access36 bucket4
    Bucket5("Bucket 5 (nullableBoundary)<br />Deps: 35, 36, 12<br /><br />ROOT PgUnionAllSingle{4}[35]"):::bucket
    classDef bucket5 stroke:#7fff00
    class Bucket5,PgCursor37,Access38 bucket5
    Bucket6("Bucket 6 (polymorphic)<br />AwsApplication,GcpApplication<br />Deps: 38, 12, 35<br />ᐳAwsApplication<br />ᐳGcpApplication<br /><br />1: JSONParse[39]<br />ᐳ: Access[40]<br />2: PgSelect[41], PgSelect[52]<br />3: PgSelectRows[46], PgSelectRows[55]<br />ᐳ: 45, 47, 48, 49, 54, 56, 57, 58"):::bucket
    classDef bucket6 stroke:#ff1493
    class Bucket6,JSONParse39,Access40,PgSelect41,First45,PgSelectRows46,PgSelectSingle47,PgClassExpression48,PgClassExpression49,PgSelect52,First54,PgSelectRows55,PgSelectSingle56,PgClassExpression57,PgClassExpression58 bucket6
    Bucket0 --> Bucket1
    Bucket1 --> Bucket2
    Bucket2 --> Bucket3
    Bucket3 --> Bucket4
    Bucket4 --> Bucket5
    Bucket5 --> Bucket6
    end
