From e26ae9b7f24118471df86fe4a471ec1f3737a42c Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Fri, 28 Feb 2025 17:07:18 +0000 Subject: [PATCH] Update snapshots now more queries are inlined --- ...d-forum-inherited-messages.defer-6.mermaid | 46 +- ...hived-forum-inherited-messages.defer-6.sql | 30 +- ...-forum-inherited-messages.stream-2.mermaid | 38 +- ...ived-forum-inherited-messages.stream-2.sql | 23 +- .../queries/conditions/basics.mermaid | 36 +- .../__tests__/queries/conditions/basics.sql | 33 +- ...mplex-filter-via-partial-variables.mermaid | 32 +- .../complex-filter-via-partial-variables.sql | 34 +- .../complex-filter-via-variables.mermaid | 32 +- .../complex-filter-via-variables.sql | 34 +- .../queries/conditions/complex-filter.mermaid | 38 +- .../queries/conditions/complex-filter.sql | 34 +- ...ondition-featured-messages-minimal.mermaid | 44 +- .../condition-featured-messages-minimal.sql | 34 +- .../queries/connections/empty.mermaid | 34 +- .../__tests__/queries/connections/empty.sql | 28 +- ...ed-column-forums-messages-list-set.mermaid | 29 +- ...mputed-column-forums-messages-list-set.sql | 30 +- .../basics-with-fragments.mermaid | 29 +- .../basics-with-fragments.sql | 44 +- .../interfaces-relational/basics.mermaid | 29 +- .../queries/interfaces-relational/basics.sql | 44 +- .../nested-more-fragments.mermaid | 29 +- .../nested-more-fragments.sql | 48 +- .../interfaces-relational/nested-more.mermaid | 29 +- .../interfaces-relational/nested-more.sql | 48 +- .../interfaces-relational/nested.mermaid | 29 +- .../queries/interfaces-relational/nested.sql | 36 +- .../basics-with-fragments.mermaid | 29 +- .../basics-with-fragments.sql | 52 +- .../interfaces-single-table/basics.mermaid | 29 +- .../interfaces-single-table/basics.sql | 44 +- .../nested-more-fragments.mermaid | 29 +- .../nested-more-fragments.sql | 56 +- .../nested-more.mermaid | 29 +- .../interfaces-single-table/nested-more.sql | 48 +- .../interfaces-single-table/nested.mermaid | 29 +- .../interfaces-single-table/nested.sql | 36 +- .../unions-table/bookmarks.deopt.mermaid | 23 +- .../queries/unions-table/bookmarks.deopt.sql | 36 +- .../v4/mutation-return-types.mermaid | 79 +- .../mutations/v4/mutation-return-types.sql | 20 +- .../person-log-entries.after-caroline.mermaid | 38 +- .../person-log-entries.after-caroline.sql | 31 +- .../person-log-entries.condition.mermaid | 29 +- .../person-log-entries.condition.sql | 24 +- .../person-log-entries.last-ordered.mermaid | 32 +- .../person-log-entries.last-ordered.sql | 31 +- .../polymorphic/person-log-entries.mermaid | 25 +- .../polymorphic/person-log-entries.sql | 29 +- .../__tests__/queries/v4/arrays.mermaid | 40 +- .../__tests__/queries/v4/arrays.sql | 54 +- .../queries/v4/composite_domains.mermaid | 25 +- .../queries/v4/composite_domains.sql | 38 +- .../queries/v4/function-return-types.mermaid | 272 +++--- .../queries/v4/function-return-types.sql | 35 +- .../queries/v4/js-reserved-keywords.mermaid | 31 +- .../queries/v4/js-reserved-keywords.sql | 27 +- .../queries/v4/json-overflow-nested.mermaid | 442 ++++----- .../queries/v4/json-overflow-nested.sql | 846 +++++++++--------- .../v4/procedure-computed-fields.mermaid | 156 ++-- .../queries/v4/procedure-computed-fields.sql | 100 +-- .../__tests__/queries/v4/rbac.basic.mermaid | 53 +- .../__tests__/queries/v4/rbac.basic.sql | 46 +- .../queries/v4/relation-head-tail.mermaid | 93 +- .../queries/v4/relation-head-tail.sql | 147 ++- .../simple-procedure-computed-fields.mermaid | 436 +++++---- .../v4/simple-procedure-computed-fields.sql | 241 +++-- .../queries/v4/simple-procedure-query.mermaid | 43 +- .../queries/v4/simple-procedure-query.sql | 16 +- .../v4/simple-relations-head-tail.mermaid | 66 +- .../queries/v4/simple-relations-head-tail.sql | 116 ++- 72 files changed, 2675 insertions(+), 2400 deletions(-) diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.mermaid index cf542d4bb0..abf595d1fa 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.mermaid @@ -12,7 +12,10 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgSelectInlineApply55["PgSelectInlineApply[55∈0] ➊"]:::plan + Object11 & Lambda12 & PgSelectInlineApply55 --> PgSelect8 + Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + Lambda25 --> PgSelectInlineApply55 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 @@ -20,13 +23,12 @@ graph TD __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 - Constant55{{"Constant[55∈0] ➊
ᐸ'EXCLUSIVELY'ᐳ"}}:::plan - Constant55 --> Lambda12 + Constant59{{"Constant[59∈0] ➊
ᐸ'EXCLUSIVELY'ᐳ"}}:::plan + Constant59 --> Lambda12 PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 - Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Constant56{{"Constant[56∈0] ➊
ᐸ'INHERIT'ᐳ"}}:::plan - Constant56 --> Lambda25 + Constant60{{"Constant[60∈0] ➊
ᐸ'INHERIT'ᐳ"}}:::plan + Constant60 --> Lambda25 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item14[/"__Item[14∈1]
ᐸ13ᐳ"\]:::itemplan PgSelectRows13 ==> __Item14 @@ -34,20 +36,20 @@ graph TD __Item14 --> PgSelectSingle15 PgClassExpression16{{"PgClassExpression[16∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle15 --> PgClassExpression16 - PgSelect26[["PgSelect[26∈3]
ᐸmessagesᐳ"]]:::plan - PgClassExpression18{{"PgClassExpression[18∈3]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression24{{"PgClassExpression[24∈3]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object11 & PgClassExpression18 & PgClassExpression24 & Lambda25 & Connection23 --> PgSelect26 - PgSelectSingle15 --> PgClassExpression18 - PgSelectSingle15 --> PgClassExpression24 + List57{{"List[57∈3]
ᐸ14,56ᐳ"}}:::plan + Access56{{"Access[56∈3] ➊
ᐸ8.m.subqueryDetailsFor26ᐳ"}}:::plan + __Item14 & Access56 --> List57 PgSelectRows27[["PgSelectRows[27∈3]"]]:::plan - PgSelect26 --> PgSelectRows27 + Lambda58{{"Lambda[58∈3]"}}:::plan + Lambda58 --> PgSelectRows27 + PgSelect8 --> Access56 + List57 --> Lambda58 __Item28[/"__Item[28∈4]
ᐸ27ᐳ"\]:::itemplan PgSelectRows27 ==> __Item28 PgSelectSingle29{{"PgSelectSingle[29∈4]
ᐸmessagesᐳ"}}:::plan __Item28 --> PgSelectSingle29 - Access43{{"Access[43∈4]
ᐸ26.cursorDetailsᐳ"}}:::plan - PgSelect26 --> Access43 + Access43{{"Access[43∈4]
ᐸ58.cursorDetailsᐳ"}}:::plan + Lambda58 --> Access43 PgCursor44{{"PgCursor[44∈5]"}}:::plan PgSelectSingle29 & Access43 --> PgCursor44 PgClassExpression30{{"PgClassExpression[30∈5]
ᐸ__messages__.”body”ᐳ"}}:::plan @@ -82,19 +84,19 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/archived-forum-inherited-messages.defer-6" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 55, 56, 11, 23
2: Lambda[12], Lambda[25]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 59, 60, 11, 23
2: Lambda[12], Lambda[25]
3: PgSelectInlineApply[55]
4: PgSelect[8]
5: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection23,Lambda25,Constant55,Constant56 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 25, 23, 6

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection23,Lambda25,PgSelectInlineApply55,Constant59,Constant60 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 8, 23, 11

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 25, 23, 6

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 8, 14, 23, 11

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,PgClassExpression16 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 11, 25, 23, 6

ROOT Connectionᐸ19ᐳ[23]
1:
ᐳ: 18, 24
2: PgSelect[26]
3: PgSelectRows[27]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 8, 14, 23, 11

ROOT Connectionᐸ19ᐳ[23]
1:
ᐳ: Access[56], List[57], Lambda[58]
2: PgSelectRows[27]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression18,PgClassExpression24,PgSelect26,PgSelectRows27 bucket3 - Bucket4("Bucket 4 (listItem)
Deps: 26, 11

ROOT __Item{4}ᐸ27ᐳ[28]"):::bucket + class Bucket3,PgSelectRows27,Access56,List57,Lambda58 bucket3 + Bucket4("Bucket 4 (listItem)
Deps: 58, 11

ROOT __Item{4}ᐸ27ᐳ[28]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item28,PgSelectSingle29,Access43 bucket4 Bucket5("Bucket 5 (nullableBoundary)
Deps: 29, 43, 11

ROOT PgSelectSingle{4}ᐸmessagesᐳ[29]"):::bucket diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.sql b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.sql index b9ba010267..392c479478 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.defer-6.sql @@ -1,7 +1,20 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[ + __messages__."body", + __messages__."author_id", + __messages__."id" + ]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "1" from app_public.forums as __forums__ where ( @@ -11,19 +24,6 @@ where ) order by __forums__."id" asc; -select - __messages__."body" as "0", - __messages__."author_id" as "1", - __messages__."id" as "2" -from app_public.messages as __messages__ -where - ( - __messages__."forum_id" = $1::"uuid" - ) and ( - (__messages__.archived_at is null) = ($2::"timestamptz" is null) - ) -order by __messages__."id" asc; - select __users_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"uuid" as "id0" from json_array_elements($1::json) with ordinality as ids) as __users_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.mermaid index f35fda655c..a514aca0ab 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.mermaid @@ -12,7 +12,10 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgSelectInlineApply88["PgSelectInlineApply[88∈0] ➊"]:::plan + Object11 & Lambda12 & PgSelectInlineApply88 --> PgSelect8 + Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + Lambda25 --> PgSelectInlineApply88 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 @@ -20,13 +23,12 @@ graph TD __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 - Constant88{{"Constant[88∈0] ➊
ᐸ'EXCLUSIVELY'ᐳ"}}:::plan - Constant88 --> Lambda12 + Constant92{{"Constant[92∈0] ➊
ᐸ'EXCLUSIVELY'ᐳ"}}:::plan + Constant92 --> Lambda12 PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 - Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Constant89{{"Constant[89∈0] ➊
ᐸ'INHERIT'ᐳ"}}:::plan - Constant89 --> Lambda25 + Constant93{{"Constant[93∈0] ➊
ᐸ'INHERIT'ᐳ"}}:::plan + Constant93 --> Lambda25 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan Constant26{{"Constant[26∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan Constant27{{"Constant[27∈0] ➊
ᐸtrueᐳ"}}:::plan @@ -47,15 +49,16 @@ graph TD PgSelect43[["PgSelect[43∈3@s]
ᐸmessagesᐳ"]]:::plan PgSelectInlineApply82["PgSelectInlineApply[82∈3] ➊"]:::plan Object11 & PgClassExpression18 & PgClassExpression24 & Lambda25 & Connection23 & PgSelectInlineApply82 --> PgSelect43 - PgSelect60[["PgSelect[60∈3]
ᐸmessages+1ᐳ"]]:::plan - Object11 & PgClassExpression18 & PgClassExpression24 & Lambda25 & Connection23 --> PgSelect60 PgSelect71[["PgSelect[71∈3]
ᐸmessages(aggregate)ᐳ"]]:::plan Object11 & PgClassExpression18 & PgClassExpression24 & Lambda25 & Connection23 --> PgSelect71 Object69{{"Object[69∈3]
ᐸ{first,last,offset,hasMore}ᐳ"}}:::plan - Access63{{"Access[63∈3]
ᐸ60.hasMoreᐳ"}}:::plan + Access63{{"Access[63∈3]
ᐸ91.hasMoreᐳ"}}:::plan Access63 --> Object69 Object64{{"Object[64∈3]
ᐸ{first,last,hasMore}ᐳ"}}:::plan Access63 --> Object64 + List90{{"List[90∈3]
ᐸ14,89ᐳ"}}:::plan + Access89{{"Access[89∈3] ➊
ᐸ8.m.subqueryDetailsFor60ᐳ"}}:::plan + __Item14 & Access89 --> List90 PgSelectSingle15 --> PgClassExpression18 PgSelectSingle15 --> PgClassExpression24 PgSelectRows29[["PgSelectRows[29∈3@s]"]]:::plan @@ -64,7 +67,8 @@ graph TD PgSelect43 --> PgSelectRows44 PgPageInfo61{{"PgPageInfo[61∈3] ➊"}}:::plan Connection23 --> PgPageInfo61 - PgSelect60 --> Access63 + Lambda91{{"Lambda[91∈3]"}}:::plan + Lambda91 --> Access63 Lambda65{{"Lambda[65∈3]
ᐸhasNextPageCbᐳ"}}:::plan Object64 --> Lambda65 Lambda70{{"Lambda[70∈3]
ᐸhasPreviousPageCbᐳ"}}:::plan @@ -77,6 +81,8 @@ graph TD First72 --> PgSelectSingle74 PgClassExpression75{{"PgClassExpression[75∈3]
ᐸcount(*)ᐳ"}}:::plan PgSelectSingle74 --> PgClassExpression75 + PgSelect8 --> Access89 + List90 --> Lambda91 __Item30[/"__Item[30∈4]
ᐸ29ᐳ"\]:::itemplan PgSelectRows29 ==> __Item30 PgSelectSingle31{{"PgSelectSingle[31∈4]
ᐸmessagesᐳ"}}:::plan @@ -129,18 +135,18 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/archived-forum-inherited-messages.stream-2" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 26, 27, 77, 78, 83, 88, 89, 11, 23
2: Lambda[12], Lambda[25]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 26, 27, 77, 78, 83, 92, 93, 11, 23
2: Lambda[12], Lambda[25]
3: PgSelectInlineApply[88]
4: PgSelect[8]
5: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection23,Lambda25,Constant26,Constant27,Constant77,Constant78,Constant83,Constant88,Constant89 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 25, 23, 6, 26, 27, 77, 78, 83

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection23,Lambda25,Constant26,Constant27,Constant77,Constant78,Constant83,PgSelectInlineApply88,Constant92,Constant93 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 11, 25, 23, 6, 8, 26, 27, 77, 78, 83

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 25, 23, 6, 26, 27, 77, 78, 83

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 25, 23, 6, 8, 14, 26, 27, 77, 78, 83

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,PgClassExpression16 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 11, 25, 23, 6, 26, 27, 77, 78, 83

ROOT Connectionᐸ19ᐳ[23]
1: 76, 82
ᐳ: 18, 24, 61
2: 28, 43, 60, 71
ᐳ: 63, 64, 65, 69, 70
3: 29, 44, 73
ᐳ: 72, 74, 75"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 11, 25, 23, 6, 8, 14, 26, 27, 77, 78, 83

ROOT Connectionᐸ19ᐳ[23]
1: 76, 82
ᐳ: 18, 24, 61, 89, 90, 91, 63, 64, 65, 69, 70
2: 28, 43, 71
3: 29, 44, 73
ᐳ: 72, 74, 75"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression18,PgClassExpression24,PgSelect28,PgSelectRows29,PgSelect43,PgSelectRows44,PgSelect60,PgPageInfo61,Access63,Object64,Lambda65,Object69,Lambda70,PgSelect71,First72,PgSelectRows73,PgSelectSingle74,PgClassExpression75,PgSelectInlineApply76,PgSelectInlineApply82 bucket3 + class Bucket3,PgClassExpression18,PgClassExpression24,PgSelect28,PgSelectRows29,PgSelect43,PgSelectRows44,PgPageInfo61,Access63,Object64,Lambda65,Object69,Lambda70,PgSelect71,First72,PgSelectRows73,PgSelectSingle74,PgClassExpression75,PgSelectInlineApply76,PgSelectInlineApply82,Access89,List90,Lambda91 bucket3 Bucket4("Bucket 4 (listItem)
Deps: 77, 78

ROOT __Item{4}ᐸ29ᐳ[30]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item30,PgSelectSingle31 bucket4 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.sql b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.sql index 9cfa8ab12e..abee61bcd8 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/archived-forum-inherited-messages.stream-2.sql @@ -1,7 +1,18 @@ select __forums__."name" as "0", __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2", + array( + select array[null]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "3" from app_public.forums as __forums__ where ( @@ -74,16 +85,6 @@ close __SNAPSHOT_CURSOR_1__ commit; /*fake*/ -select /* NOTHING?! */ -from app_public.messages as __messages__ -where - ( - __messages__."forum_id" = $1::"uuid" - ) and ( - (__messages__.archived_at is null) = ($2::"timestamptz" is null) - ) -order by __messages__."id" asc; - select (count(*))::text as "0" from app_public.messages as __messages__ diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/basics.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/basics.mermaid index c209e525d1..54ff379bd1 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/basics.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/basics.mermaid @@ -12,36 +12,38 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgSelectInlineApply30["PgSelectInlineApply[30∈0] ➊"]:::plan + Object11 & Lambda12 & PgSelectInlineApply30 --> PgSelect8 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 + Constant35{{"Constant[35∈0] ➊
ᐸ2ᐳ"}}:::plan + Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + Constant35 & Lambda25 --> PgSelectInlineApply30 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 - Constant30{{"Constant[30∈0] ➊
ᐸ'YES'ᐳ"}}:::plan - Constant30 --> Lambda12 + Constant34{{"Constant[34∈0] ➊
ᐸ'YES'ᐳ"}}:::plan + Constant34 --> Lambda12 PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 - Lambda25[["Lambda[25∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant18{{"Constant[18∈0] ➊
ᐸ'INHERIT'ᐳ"}}:::plan Constant18 --> Lambda25 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - Constant31{{"Constant[31∈0] ➊
ᐸ2ᐳ"}}:::plan __Item14[/"__Item[14∈1]
ᐸ13ᐳ"\]:::itemplan PgSelectRows13 ==> __Item14 PgSelectSingle15{{"PgSelectSingle[15∈1]
ᐸforumsᐳ"}}:::plan __Item14 --> PgSelectSingle15 - PgSelect20[["PgSelect[20∈2]
ᐸmessagesᐳ"]]:::plan - PgClassExpression19{{"PgClassExpression[19∈2]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression24{{"PgClassExpression[24∈2]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object11 & PgClassExpression19 & Constant31 & PgClassExpression24 & Lambda25 --> PgSelect20 + List32{{"List[32∈2]
ᐸ14,31ᐳ"}}:::plan + Access31{{"Access[31∈2] ➊
ᐸ8.m.subqueryDetailsFor20ᐳ"}}:::plan + __Item14 & Access31 --> List32 PgClassExpression16{{"PgClassExpression[16∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle15 --> PgClassExpression16 - PgSelectSingle15 --> PgClassExpression19 - PgSelectSingle15 --> PgClassExpression24 PgSelectRows26[["PgSelectRows[26∈2]"]]:::plan - PgSelect20 --> PgSelectRows26 + Lambda33{{"Lambda[33∈2]"}}:::plan + Lambda33 --> PgSelectRows26 + PgSelect8 --> Access31 + List32 --> Lambda33 __Item27[/"__Item[27∈3]
ᐸ26ᐳ"\]:::itemplan PgSelectRows26 ==> __Item27 PgSelectSingle28{{"PgSelectSingle[28∈3]
ᐸmessagesᐳ"}}:::plan @@ -52,15 +54,15 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/basics" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 18, 30, 31, 11
2: Lambda[12], Lambda[25]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 18, 34, 35, 11
2: Lambda[12], Lambda[25]
3: PgSelectInlineApply[30]
4: PgSelect[8]
5: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Constant18,Lambda25,Constant30,Constant31 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 31, 25

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Constant18,Lambda25,PgSelectInlineApply30,Constant34,Constant35 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 8

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 31, 25

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]
1:
ᐳ: 16, 19, 24
2: PgSelect[20]
3: PgSelectRows[26]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 8, 14

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]
1:
ᐳ: 16, 31, 32, 33
2: PgSelectRows[26]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression16,PgClassExpression19,PgSelect20,PgClassExpression24,PgSelectRows26 bucket2 + class Bucket2,PgClassExpression16,PgSelectRows26,Access31,List32,Lambda33 bucket2 Bucket3("Bucket 3 (listItem)

ROOT __Item{3}ᐸ26ᐳ[27]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item27,PgSelectSingle28 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/basics.sql b/grafast/dataplan-pg/__tests__/queries/conditions/basics.sql index e5e2cb2aac..521b177447 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/basics.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/basics.sql @@ -1,26 +1,21 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[ + __messages__."body" + ]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + limit 2 + )::text as "1" from app_public.forums as __forums__ where ( true /* authorization checks */ ) order by __forums__."id" asc; - -select __messages_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"uuid" as "id0", (ids.value->>1)::"timestamptz" as "id1" from json_array_elements($1::json) with ordinality as ids) as __messages_identifiers__, -lateral ( - select - __messages__."body" as "0", - __messages_identifiers__.idx as "1" - from app_public.messages as __messages__ - where - ( - __messages__."forum_id" = __messages_identifiers__."id0" - ) and ( - (__messages__.archived_at is null) = (__messages_identifiers__."id1" is null) - ) - order by __messages__."id" asc - limit 2 -) as __messages_result__; diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.mermaid index 2bf3b76391..739a07dda8 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.mermaid @@ -13,7 +13,11 @@ graph TD Object15{{"Object[15∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda16[["Lambda[16∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan ApplyInput17{{"ApplyInput[17∈0] ➊"}}:::plan - Object15 & Lambda16 & ApplyInput17 --> PgSelect12 + PgSelectInlineApply40["PgSelectInlineApply[40∈0] ➊"]:::plan + Object15 & Lambda16 & ApplyInput17 & PgSelectInlineApply40 --> PgSelect12 + ApplyInput32{{"ApplyInput[32∈0] ➊"}}:::plan + Lambda34[["Lambda[34∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + ApplyInput32 & Lambda34 --> PgSelectInlineApply40 Access13{{"Access[13∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access14{{"Access[14∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access13 & Access14 --> Object15 @@ -38,25 +42,23 @@ graph TD PgSelect12 --> PgSelectRows18 __Value0 --> Access23 __Value0 --> Access25 - ApplyInput32{{"ApplyInput[32∈0] ➊"}}:::plan __InputObject22 --> ApplyInput32 - Lambda34[["Lambda[34∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant7 --> Lambda34 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item19[/"__Item[19∈1]
ᐸ18ᐳ"\]:::itemplan PgSelectRows18 ==> __Item19 PgSelectSingle20{{"PgSelectSingle[20∈1]
ᐸforumsᐳ"}}:::plan __Item19 --> PgSelectSingle20 - PgSelect28[["PgSelect[28∈2]
ᐸmessagesᐳ"]]:::plan - PgClassExpression27{{"PgClassExpression[27∈2]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression33{{"PgClassExpression[33∈2]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object15 & PgClassExpression27 & ApplyInput32 & PgClassExpression33 & Lambda34 --> PgSelect28 + List42{{"List[42∈2]
ᐸ19,41ᐳ"}}:::plan + Access41{{"Access[41∈2] ➊
ᐸ12.m.subqueryDetailsFor28ᐳ"}}:::plan + __Item19 & Access41 --> List42 PgClassExpression21{{"PgClassExpression[21∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle20 --> PgClassExpression21 - PgSelectSingle20 --> PgClassExpression27 - PgSelectSingle20 --> PgClassExpression33 PgSelectRows35[["PgSelectRows[35∈2]"]]:::plan - PgSelect28 --> PgSelectRows35 + Lambda43{{"Lambda[43∈2]"}}:::plan + Lambda43 --> PgSelectRows35 + PgSelect12 --> Access41 + List42 --> Lambda43 __Item36[/"__Item[36∈3]
ᐸ35ᐳ"\]:::itemplan PgSelectRows35 ==> __Item36 PgSelectSingle37{{"PgSelectSingle[37∈3]
ᐸmessagesᐳ"}}:::plan @@ -69,15 +71,15 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/complex-filter-via-partial-variables" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 10, 13, 14, 23, 25, 9, 15, 22, 32, 8, 17
2: Lambda[16], Lambda[34]
3: PgSelect[12]
4: PgSelectRows[18]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 10, 13, 14, 23, 25, 9, 15, 22, 32, 8, 17
2: Lambda[16], Lambda[34]
3: PgSelectInlineApply[40]
4: PgSelect[12]
5: PgSelectRows[18]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value0,__Value2,__Value4,Constant7,__InputObject8,__InputObject9,Access10,PgSelect12,Access13,Access14,Object15,Lambda16,ApplyInput17,PgSelectRows18,__InputObject22,Access23,Access25,ApplyInput32,Lambda34 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 15, 6, 32, 34

ROOT __Item{1}ᐸ18ᐳ[19]"):::bucket + class Bucket0,__Value0,__Value2,__Value4,Constant7,__InputObject8,__InputObject9,Access10,PgSelect12,Access13,Access14,Object15,Lambda16,ApplyInput17,PgSelectRows18,__InputObject22,Access23,Access25,ApplyInput32,Lambda34,PgSelectInlineApply40 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 12

ROOT __Item{1}ᐸ18ᐳ[19]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item19,PgSelectSingle20 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 20, 15, 6, 32, 34

ROOT PgSelectSingle{1}ᐸforumsᐳ[20]
1:
ᐳ: 21, 27, 33
2: PgSelect[28]
3: PgSelectRows[35]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 20, 12, 19

ROOT PgSelectSingle{1}ᐸforumsᐳ[20]
1:
ᐳ: 21, 41, 42, 43
2: PgSelectRows[35]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression21,PgClassExpression27,PgSelect28,PgClassExpression33,PgSelectRows35 bucket2 + class Bucket2,PgClassExpression21,PgSelectRows35,Access41,List42,Lambda43 bucket2 Bucket3("Bucket 3 (listItem)

ROOT __Item{3}ᐸ35ᐳ[36]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item36,PgSelectSingle37 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.sql b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.sql index 64da1672e6..fa586800ae 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-partial-variables.sql @@ -1,7 +1,21 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[ + __messages__."body", + __messages__."featured"::text + ]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + __messages__.featured <> $1::"bool" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "1" from app_public.forums as __forums__ where ( @@ -16,22 +30,8 @@ where ( __forums__."id" = __messages_filter__."forum_id" ) and ( - __messages_filter__.featured = $1::"bool" + __messages_filter__.featured = $2::"bool" ) ) ) order by __forums__."id" asc; - -select - __messages__."body" as "0", - __messages__."featured"::text as "1" -from app_public.messages as __messages__ -where - ( - __messages__."forum_id" = $1::"uuid" - ) and ( - __messages__.featured <> $2::"bool" - ) and ( - (__messages__.archived_at is null) = ($3::"timestamptz" is null) - ) -order by __messages__."id" asc; diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.mermaid index dad3d87110..716f0838ac 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.mermaid @@ -13,7 +13,11 @@ graph TD Object13{{"Object[13∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda14[["Lambda[14∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan ApplyInput15{{"ApplyInput[15∈0] ➊"}}:::plan - Object13 & Lambda14 & ApplyInput15 --> PgSelect10 + PgSelectInlineApply35["PgSelectInlineApply[35∈0] ➊"]:::plan + Object13 & Lambda14 & ApplyInput15 & PgSelectInlineApply35 --> PgSelect10 + ApplyInput27{{"ApplyInput[27∈0] ➊"}}:::plan + Lambda29[["Lambda[29∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + ApplyInput27 & Lambda29 --> PgSelectInlineApply35 Access11{{"Access[11∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access12{{"Access[12∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access11 & Access12 --> Object13 @@ -30,25 +34,23 @@ graph TD PgSelect10 --> PgSelectRows16 Access20{{"Access[20∈0] ➊
ᐸ0.messagesFilterᐳ"}}:::plan __Value0 --> Access20 - ApplyInput27{{"ApplyInput[27∈0] ➊"}}:::plan Access20 --> ApplyInput27 - Lambda29[["Lambda[29∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant7 --> Lambda29 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item17[/"__Item[17∈1]
ᐸ16ᐳ"\]:::itemplan PgSelectRows16 ==> __Item17 PgSelectSingle18{{"PgSelectSingle[18∈1]
ᐸforumsᐳ"}}:::plan __Item17 --> PgSelectSingle18 - PgSelect23[["PgSelect[23∈2]
ᐸmessagesᐳ"]]:::plan - PgClassExpression22{{"PgClassExpression[22∈2]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression28{{"PgClassExpression[28∈2]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object13 & PgClassExpression22 & ApplyInput27 & PgClassExpression28 & Lambda29 --> PgSelect23 + List37{{"List[37∈2]
ᐸ17,36ᐳ"}}:::plan + Access36{{"Access[36∈2] ➊
ᐸ10.m.subqueryDetailsFor23ᐳ"}}:::plan + __Item17 & Access36 --> List37 PgClassExpression19{{"PgClassExpression[19∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle18 --> PgClassExpression19 - PgSelectSingle18 --> PgClassExpression22 - PgSelectSingle18 --> PgClassExpression28 PgSelectRows30[["PgSelectRows[30∈2]"]]:::plan - PgSelect23 --> PgSelectRows30 + Lambda38{{"Lambda[38∈2]"}}:::plan + Lambda38 --> PgSelectRows30 + PgSelect10 --> Access36 + List37 --> Lambda38 __Item31[/"__Item[31∈3]
ᐸ30ᐳ"\]:::itemplan PgSelectRows30 ==> __Item31 PgSelectSingle32{{"PgSelectSingle[32∈3]
ᐸmessagesᐳ"}}:::plan @@ -61,15 +63,15 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/complex-filter-via-variables" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 8, 11, 12, 20, 13, 15, 27
2: Lambda[14], Lambda[29]
3: PgSelect[10]
4: PgSelectRows[16]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 8, 11, 12, 20, 13, 15, 27
2: Lambda[14], Lambda[29]
3: PgSelectInlineApply[35]
4: PgSelect[10]
5: PgSelectRows[16]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value0,__Value2,__Value4,Constant7,Access8,PgSelect10,Access11,Access12,Object13,Lambda14,ApplyInput15,PgSelectRows16,Access20,ApplyInput27,Lambda29 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 13, 6, 27, 29

ROOT __Item{1}ᐸ16ᐳ[17]"):::bucket + class Bucket0,__Value0,__Value2,__Value4,Constant7,Access8,PgSelect10,Access11,Access12,Object13,Lambda14,ApplyInput15,PgSelectRows16,Access20,ApplyInput27,Lambda29,PgSelectInlineApply35 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 10

ROOT __Item{1}ᐸ16ᐳ[17]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item17,PgSelectSingle18 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 18, 13, 6, 27, 29

ROOT PgSelectSingle{1}ᐸforumsᐳ[18]
1:
ᐳ: 19, 22, 28
2: PgSelect[23]
3: PgSelectRows[30]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 18, 10, 17

ROOT PgSelectSingle{1}ᐸforumsᐳ[18]
1:
ᐳ: 19, 36, 37, 38
2: PgSelectRows[30]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression19,PgClassExpression22,PgSelect23,PgClassExpression28,PgSelectRows30 bucket2 + class Bucket2,PgClassExpression19,PgSelectRows30,Access36,List37,Lambda38 bucket2 Bucket3("Bucket 3 (listItem)

ROOT __Item{3}ᐸ30ᐳ[31]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item31,PgSelectSingle32 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.sql b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.sql index 64da1672e6..fa586800ae 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter-via-variables.sql @@ -1,7 +1,21 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[ + __messages__."body", + __messages__."featured"::text + ]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + __messages__.featured <> $1::"bool" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "1" from app_public.forums as __forums__ where ( @@ -16,22 +30,8 @@ where ( __forums__."id" = __messages_filter__."forum_id" ) and ( - __messages_filter__.featured = $1::"bool" + __messages_filter__.featured = $2::"bool" ) ) ) order by __forums__."id" asc; - -select - __messages__."body" as "0", - __messages__."featured"::text as "1" -from app_public.messages as __messages__ -where - ( - __messages__."forum_id" = $1::"uuid" - ) and ( - __messages__.featured <> $2::"bool" - ) and ( - (__messages__.archived_at is null) = ($3::"timestamptz" is null) - ) -order by __messages__."id" asc; diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.mermaid index 7dcfc9e3a3..b79e3428f5 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.mermaid @@ -13,19 +13,23 @@ graph TD Object16{{"Object[16∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda17[["Lambda[17∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan ApplyInput18{{"ApplyInput[18∈0] ➊"}}:::plan - Object16 & Lambda17 & ApplyInput18 --> PgSelect13 + PgSelectInlineApply39["PgSelectInlineApply[39∈0] ➊"]:::plan + Object16 & Lambda17 & ApplyInput18 & PgSelectInlineApply39 --> PgSelect13 + ApplyInput31{{"ApplyInput[31∈0] ➊"}}:::plan + Lambda33[["Lambda[33∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + ApplyInput31 & Lambda33 --> PgSelectInlineApply39 __InputObject10{{"__InputObject[10∈0] ➊"}}:::plan __InputObject11{{"__InputObject[11∈0] ➊"}}:::plan __InputObject11 --> __InputObject10 - Constant39{{"Constant[39∈0] ➊
ᐸtrueᐳ"}}:::plan - Constant39 --> __InputObject11 + Constant43{{"Constant[43∈0] ➊
ᐸtrueᐳ"}}:::plan + Constant43 --> __InputObject11 Access14{{"Access[14∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access15{{"Access[15∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access14 & Access15 --> Object16 __InputObject23{{"__InputObject[23∈0] ➊"}}:::plan __InputObject24{{"__InputObject[24∈0] ➊"}}:::plan __InputObject24 --> __InputObject23 - Constant39 --> __InputObject24 + Constant43 --> __InputObject24 __InputObject8{{"__InputObject[8∈0] ➊"}}:::plan __InputObject9{{"__InputObject[9∈0] ➊"}}:::plan __InputObject9 --> __InputObject8 @@ -38,25 +42,23 @@ graph TD __InputObject8 --> ApplyInput18 PgSelectRows19[["PgSelectRows[19∈0] ➊"]]:::plan PgSelect13 --> PgSelectRows19 - ApplyInput31{{"ApplyInput[31∈0] ➊"}}:::plan __InputObject23 --> ApplyInput31 - Lambda33[["Lambda[33∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant7 --> Lambda33 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item20[/"__Item[20∈1]
ᐸ19ᐳ"\]:::itemplan PgSelectRows19 ==> __Item20 PgSelectSingle21{{"PgSelectSingle[21∈1]
ᐸforumsᐳ"}}:::plan __Item20 --> PgSelectSingle21 - PgSelect27[["PgSelect[27∈2]
ᐸmessagesᐳ"]]:::plan - PgClassExpression26{{"PgClassExpression[26∈2]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression32{{"PgClassExpression[32∈2]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object16 & PgClassExpression26 & ApplyInput31 & PgClassExpression32 & Lambda33 --> PgSelect27 + List41{{"List[41∈2]
ᐸ20,40ᐳ"}}:::plan + Access40{{"Access[40∈2] ➊
ᐸ13.m.subqueryDetailsFor27ᐳ"}}:::plan + __Item20 & Access40 --> List41 PgClassExpression22{{"PgClassExpression[22∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle21 --> PgClassExpression22 - PgSelectSingle21 --> PgClassExpression26 - PgSelectSingle21 --> PgClassExpression32 PgSelectRows34[["PgSelectRows[34∈2]"]]:::plan - PgSelect27 --> PgSelectRows34 + Lambda42{{"Lambda[42∈2]"}}:::plan + Lambda42 --> PgSelectRows34 + PgSelect13 --> Access40 + List41 --> Lambda42 __Item35[/"__Item[35∈3]
ᐸ34ᐳ"\]:::itemplan PgSelectRows34 ==> __Item35 PgSelectSingle36{{"PgSelectSingle[36∈3]
ᐸmessagesᐳ"}}:::plan @@ -69,15 +71,15 @@ graph TD %% define steps subgraph "Buckets for queries/conditions/complex-filter" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 14, 15, 39, 11, 16, 24, 10, 23, 31, 9, 8, 18
2: Lambda[17], Lambda[33]
3: PgSelect[13]
4: PgSelectRows[19]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 14, 15, 43, 11, 16, 24, 10, 23, 31, 9, 8, 18
2: Lambda[17], Lambda[33]
3: PgSelectInlineApply[39]
4: PgSelect[13]
5: PgSelectRows[19]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Constant7,__InputObject8,__InputObject9,__InputObject10,__InputObject11,PgSelect13,Access14,Access15,Object16,Lambda17,ApplyInput18,PgSelectRows19,__InputObject23,__InputObject24,ApplyInput31,Lambda33,Constant39 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 16, 6, 31, 33

ROOT __Item{1}ᐸ19ᐳ[20]"):::bucket + class Bucket0,__Value2,__Value4,Constant7,__InputObject8,__InputObject9,__InputObject10,__InputObject11,PgSelect13,Access14,Access15,Object16,Lambda17,ApplyInput18,PgSelectRows19,__InputObject23,__InputObject24,ApplyInput31,Lambda33,PgSelectInlineApply39,Constant43 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 13

ROOT __Item{1}ᐸ19ᐳ[20]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item20,PgSelectSingle21 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 21, 16, 6, 31, 33

ROOT PgSelectSingle{1}ᐸforumsᐳ[21]
1:
ᐳ: 22, 26, 32
2: PgSelect[27]
3: PgSelectRows[34]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 21, 13, 20

ROOT PgSelectSingle{1}ᐸforumsᐳ[21]
1:
ᐳ: 22, 40, 41, 42
2: PgSelectRows[34]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression22,PgClassExpression26,PgSelect27,PgClassExpression32,PgSelectRows34 bucket2 + class Bucket2,PgClassExpression22,PgSelectRows34,Access40,List41,Lambda42 bucket2 Bucket3("Bucket 3 (listItem)

ROOT __Item{3}ᐸ34ᐳ[35]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item35,PgSelectSingle36 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.sql b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.sql index 64da1672e6..fa586800ae 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/complex-filter.sql @@ -1,7 +1,21 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[ + __messages__."body", + __messages__."featured"::text + ]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + __messages__.featured <> $1::"bool" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "1" from app_public.forums as __forums__ where ( @@ -16,22 +30,8 @@ where ( __forums__."id" = __messages_filter__."forum_id" ) and ( - __messages_filter__.featured = $1::"bool" + __messages_filter__.featured = $2::"bool" ) ) ) order by __forums__."id" asc; - -select - __messages__."body" as "0", - __messages__."featured"::text as "1" -from app_public.messages as __messages__ -where - ( - __messages__."forum_id" = $1::"uuid" - ) and ( - __messages__.featured <> $2::"bool" - ) and ( - (__messages__.archived_at is null) = ($3::"timestamptz" is null) - ) -order by __messages__."id" asc; diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.mermaid b/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.mermaid index ddb660a2f5..f4f82997b5 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.mermaid @@ -12,13 +12,17 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgSelectInlineApply39["PgSelectInlineApply[39∈0] ➊"]:::plan + Object11 & Lambda12 & PgSelectInlineApply39 --> PgSelect8 + Constant43{{"Constant[43∈0] ➊
ᐸ5ᐳ"}}:::plan + ApplyInput25{{"ApplyInput[25∈0] ➊"}}:::plan + Lambda27[["Lambda[27∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + Constant43 & ApplyInput25 & Lambda27 --> PgSelectInlineApply39 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 Connection24{{"Connection[24∈0] ➊
ᐸ20ᐳ"}}:::plan - Constant39{{"Constant[39∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant39 --> Connection24 + Constant43 --> Connection24 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 @@ -27,31 +31,31 @@ graph TD PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 __InputObject17{{"__InputObject[17∈0] ➊"}}:::plan - Constant40{{"Constant[40∈0] ➊
ᐸtrueᐳ"}}:::plan - Constant40 --> __InputObject17 - ApplyInput25{{"ApplyInput[25∈0] ➊"}}:::plan + Constant44{{"Constant[44∈0] ➊
ᐸtrueᐳ"}}:::plan + Constant44 --> __InputObject17 __InputObject17 --> ApplyInput25 - Lambda27[["Lambda[27∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant7 --> Lambda27 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item14[/"__Item[14∈1]
ᐸ13ᐳ"\]:::itemplan PgSelectRows13 ==> __Item14 PgSelectSingle15{{"PgSelectSingle[15∈1]
ᐸforumsᐳ"}}:::plan __Item14 --> PgSelectSingle15 - PgSelect28[["PgSelect[28∈3]
ᐸmessages+1ᐳ"]]:::plan + PgSelect34[["PgSelect[34∈3]
ᐸmessages(aggregate)ᐳ"]]:::plan PgClassExpression19{{"PgClassExpression[19∈3]
ᐸ__forums__.”id”ᐳ"}}:::plan PgClassExpression26{{"PgClassExpression[26∈3]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object11 & PgClassExpression19 & ApplyInput25 & PgClassExpression26 & Lambda27 & Connection24 & Constant39 --> PgSelect28 - PgSelect34[["PgSelect[34∈3]
ᐸmessages(aggregate)ᐳ"]]:::plan Object11 & PgClassExpression19 & ApplyInput25 & PgClassExpression26 & Lambda27 & Connection24 --> PgSelect34 Object32{{"Object[32∈3]
ᐸ{first,last,hasMore}ᐳ"}}:::plan - Access31{{"Access[31∈3]
ᐸ28.hasMoreᐳ"}}:::plan - Constant39 & Access31 --> Object32 + Access31{{"Access[31∈3]
ᐸ42.hasMoreᐳ"}}:::plan + Constant43 & Access31 --> Object32 + List41{{"List[41∈3]
ᐸ14,40ᐳ"}}:::plan + Access40{{"Access[40∈3] ➊
ᐸ8.m.subqueryDetailsFor28ᐳ"}}:::plan + __Item14 & Access40 --> List41 PgSelectSingle15 --> PgClassExpression19 PgSelectSingle15 --> PgClassExpression26 PgPageInfo29{{"PgPageInfo[29∈3] ➊"}}:::plan Connection24 --> PgPageInfo29 - PgSelect28 --> Access31 + Lambda42{{"Lambda[42∈3]"}}:::plan + Lambda42 --> Access31 Lambda33{{"Lambda[33∈3]
ᐸhasNextPageCbᐳ"}}:::plan Object32 --> Lambda33 First35{{"First[35∈3]"}}:::plan @@ -62,22 +66,24 @@ graph TD First35 --> PgSelectSingle37 PgClassExpression38{{"PgClassExpression[38∈3]
ᐸcount(*)ᐳ"}}:::plan PgSelectSingle37 --> PgClassExpression38 + PgSelect8 --> Access40 + List41 --> Lambda42 %% define steps subgraph "Buckets for queries/conditions/condition-featured-messages-minimal" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 9, 10, 39, 40, 11, 17, 24, 25
2: Lambda[12], Lambda[27]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 9, 10, 43, 44, 11, 17, 24, 25
2: Lambda[12], Lambda[27]
3: PgSelectInlineApply[39]
4: PgSelect[8]
5: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,__InputObject17,Connection24,ApplyInput25,Lambda27,Constant39,Constant40 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 25, 27, 24, 39, 6

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,__InputObject17,Connection24,ApplyInput25,Lambda27,PgSelectInlineApply39,Constant43,Constant44 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 24, 43, 6, 11, 25, 27, 8

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 25, 27, 24, 39, 6

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 24, 43, 6, 11, 25, 27, 8, 14

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 11, 25, 27, 24, 39, 6

ROOT Connectionᐸ20ᐳ[24]
1:
ᐳ: 19, 26, 29
2: PgSelect[28], PgSelect[34]
ᐳ: Access[31], Object[32], Lambda[33]
3: PgSelectRows[36]
ᐳ: 35, 37, 38"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 24, 43, 6, 11, 25, 27, 8, 14

ROOT Connectionᐸ20ᐳ[24]
1:
ᐳ: 19, 26, 29, 40, 41, 42, 31, 32, 33
2: PgSelect[34]
3: PgSelectRows[36]
ᐳ: 35, 37, 38"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression19,PgClassExpression26,PgSelect28,PgPageInfo29,Access31,Object32,Lambda33,PgSelect34,First35,PgSelectRows36,PgSelectSingle37,PgClassExpression38 bucket3 + class Bucket3,PgClassExpression19,PgClassExpression26,PgPageInfo29,Access31,Object32,Lambda33,PgSelect34,First35,PgSelectRows36,PgSelectSingle37,PgClassExpression38,Access40,List41,Lambda42 bucket3 Bucket0 --> Bucket1 Bucket1 --> Bucket2 Bucket2 --> Bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.sql b/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.sql index 07a28df889..701d300625 100644 --- a/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.sql +++ b/grafast/dataplan-pg/__tests__/queries/conditions/condition-featured-messages-minimal.sql @@ -1,6 +1,20 @@ select __forums__."id" as "0", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "1" + to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "1", + array( + select array[null]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + __messages__.featured = $1::"bool" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + limit 6 + )::text as "2" from app_public.forums as __forums__ where ( @@ -10,24 +24,6 @@ where ) order by __forums__."id" asc; -select __messages_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"uuid" as "id0", (ids.value->>1)::"timestamptz" as "id1" from json_array_elements($2::json) with ordinality as ids) as __messages_identifiers__, -lateral ( - select - __messages_identifiers__.idx as "0" - from app_public.messages as __messages__ - where - ( - __messages__."forum_id" = __messages_identifiers__."id0" - ) and ( - __messages__.featured = $1::"bool" - ) and ( - (__messages__.archived_at is null) = (__messages_identifiers__."id1" is null) - ) - order by __messages__."id" asc - limit 6 -) as __messages_result__; - select __messages_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"uuid" as "id0", (ids.value->>1)::"timestamptz" as "id1" from json_array_elements($2::json) with ordinality as ids) as __messages_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/connections/empty.mermaid b/grafast/dataplan-pg/__tests__/queries/connections/empty.mermaid index 8069094d5a..90b55dc039 100644 --- a/grafast/dataplan-pg/__tests__/queries/connections/empty.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/connections/empty.mermaid @@ -12,7 +12,10 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgSelectInlineApply36["PgSelectInlineApply[36∈0] ➊"]:::plan + Object11 & Lambda12 & PgSelectInlineApply36 --> PgSelect8 + Lambda24[["Lambda[24∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan + Lambda24 --> PgSelectInlineApply36 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 @@ -24,7 +27,6 @@ graph TD Constant7 --> Lambda12 PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 - Lambda24[["Lambda[24∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan Constant7 --> Lambda24 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan __Item14[/"__Item[14∈1]
ᐸ13ᐳ"\]:::itemplan @@ -33,40 +35,40 @@ graph TD __Item14 --> PgSelectSingle15 PgClassExpression16{{"PgClassExpression[16∈2]
ᐸ__forums__.”name”ᐳ"}}:::plan PgSelectSingle15 --> PgClassExpression16 - PgSelect25[["PgSelect[25∈3]
ᐸmessages+1ᐳ"]]:::plan - PgClassExpression17{{"PgClassExpression[17∈3]
ᐸ__forums__.”id”ᐳ"}}:::plan - PgClassExpression23{{"PgClassExpression[23∈3]
ᐸ__forums__...chived_at”ᐳ"}}:::plan - Object11 & PgClassExpression17 & PgClassExpression23 & Lambda24 & Connection22 --> PgSelect25 Object34{{"Object[34∈3]
ᐸ{first,last,offset,hasMore}ᐳ"}}:::plan - Access28{{"Access[28∈3]
ᐸ25.hasMoreᐳ"}}:::plan + Access28{{"Access[28∈3]
ᐸ39.hasMoreᐳ"}}:::plan Access28 --> Object34 Object29{{"Object[29∈3]
ᐸ{first,last,hasMore}ᐳ"}}:::plan Access28 --> Object29 - PgSelectSingle15 --> PgClassExpression17 - PgSelectSingle15 --> PgClassExpression23 + List38{{"List[38∈3]
ᐸ14,37ᐳ"}}:::plan + Access37{{"Access[37∈3] ➊
ᐸ8.m.subqueryDetailsFor25ᐳ"}}:::plan + __Item14 & Access37 --> List38 PgPageInfo26{{"PgPageInfo[26∈3] ➊"}}:::plan Connection22 --> PgPageInfo26 - PgSelect25 --> Access28 + Lambda39{{"Lambda[39∈3]"}}:::plan + Lambda39 --> Access28 Lambda30{{"Lambda[30∈3]
ᐸhasNextPageCbᐳ"}}:::plan Object29 --> Lambda30 Lambda35{{"Lambda[35∈3]
ᐸhasPreviousPageCbᐳ"}}:::plan Object34 --> Lambda35 + PgSelect8 --> Access37 + List38 --> Lambda39 %% define steps subgraph "Buckets for queries/connections/empty" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 9, 10, 11, 22
2: Lambda[12], Lambda[24]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 9, 10, 11, 22
2: Lambda[12], Lambda[24]
3: PgSelectInlineApply[36]
4: PgSelect[8]
5: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection22,Lambda24 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 24, 22, 6

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,Connection22,Lambda24,PgSelectInlineApply36 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 22, 6, 8

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 24, 22, 6

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 22, 6, 8, 14

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,PgClassExpression16 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 15, 11, 24, 22, 6

ROOT Connectionᐸ18ᐳ[22]
1:
ᐳ: 17, 23, 26
2: PgSelect[25]
ᐳ: 28, 29, 30, 34, 35"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 22, 6, 8, 14

ROOT Connectionᐸ18ᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression17,PgClassExpression23,PgSelect25,PgPageInfo26,Access28,Object29,Lambda30,Object34,Lambda35 bucket3 + class Bucket3,PgPageInfo26,Access28,Object29,Lambda30,Object34,Lambda35,Access37,List38,Lambda39 bucket3 Bucket0 --> Bucket1 Bucket1 --> Bucket2 Bucket2 --> Bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/connections/empty.sql b/grafast/dataplan-pg/__tests__/queries/connections/empty.sql index 768d8ab9be..401821db0a 100644 --- a/grafast/dataplan-pg/__tests__/queries/connections/empty.sql +++ b/grafast/dataplan-pg/__tests__/queries/connections/empty.sql @@ -1,7 +1,16 @@ select __forums__."name" as "0", - __forums__."id" as "1", - to_char(__forums__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "2" + array( + select array[null]::text[] + from app_public.messages as __messages__ + where + ( + __messages__."forum_id" = __forums__."id" + ) and ( + (__messages__.archived_at is null) = (__forums__."archived_at" is null) + ) + order by __messages__."id" asc + )::text as "1" from app_public.forums as __forums__ where ( @@ -10,18 +19,3 @@ where __forums__.archived_at is null ) order by __forums__."id" asc; - -select __messages_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"uuid" as "id0", (ids.value->>1)::"timestamptz" as "id1" from json_array_elements($1::json) with ordinality as ids) as __messages_identifiers__, -lateral ( - select - __messages_identifiers__.idx as "0" - from app_public.messages as __messages__ - where - ( - __messages__."forum_id" = __messages_identifiers__."id0" - ) and ( - (__messages__.archived_at is null) = (__messages_identifiers__."id1" is null) - ) - order by __messages__."id" asc -) as __messages_result__; diff --git a/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.mermaid b/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.mermaid index 0a533af740..85ada8ce8b 100644 --- a/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.mermaid @@ -12,7 +12,9 @@ graph TD PgSelect8[["PgSelect[8∈0] ➊
ᐸforumsᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Lambda12[["Lambda[12∈0] ➊
ᐸincludeArchivedConditionᐳ"]]:::unbatchedplan - Object11 & Lambda12 --> PgSelect8 + PgFromExpression21{{"PgFromExpression[21∈0] ➊"}}:::plan + PgSelectInlineApply34["PgSelectInlineApply[34∈0] ➊"]:::plan + Object11 & Lambda12 & PgFromExpression21 & PgSelectInlineApply34 --> PgSelect8 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 @@ -24,19 +26,20 @@ graph TD PgSelectRows13[["PgSelectRows[13∈0] ➊"]]:::plan PgSelect8 --> PgSelectRows13 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - PgFromExpression21{{"PgFromExpression[21∈0] ➊"}}:::plan __Item14[/"__Item[14∈1]
ᐸ13ᐳ"\]:::itemplan PgSelectRows13 ==> __Item14 PgSelectSingle15{{"PgSelectSingle[15∈1]
ᐸforumsᐳ"}}:::plan __Item14 --> PgSelectSingle15 - PgSelect17[["PgSelect[17∈2]
ᐸforums_messages_list_setᐳ"]]:::plan - PgClassExpression16{{"PgClassExpression[16∈2]
ᐸ__forums__ᐳ"}}:::plan - Object11 & PgClassExpression16 & PgFromExpression21 --> PgSelect17 __ListTransform22[["__ListTransform[22∈2]
ᐸpartitionByIndex1:17ᐳ"]]:::plan PgSelectRows23[["PgSelectRows[23∈2]"]]:::plan - PgSelectRows23 & PgSelect17 --> __ListTransform22 - PgSelectSingle15 --> PgClassExpression16 - PgSelect17 --> PgSelectRows23 + Lambda37{{"Lambda[37∈2]"}}:::plan + PgSelectRows23 & Lambda37 --> __ListTransform22 + List36{{"List[36∈2]
ᐸ14,35ᐳ"}}:::plan + Access35{{"Access[35∈2] ➊
ᐸ8.m.subqueryDetailsFor17ᐳ"}}:::plan + __Item14 & Access35 --> List36 + Lambda37 --> PgSelectRows23 + PgSelect8 --> Access35 + List36 --> Lambda37 __Item24[/"__Item[24∈3]
ᐸ23ᐳ"\]:::itemplan PgSelectRows23 -.-> __Item24 PgSelectSingle25{{"PgSelectSingle[25∈3]
ᐸforums_messages_list_setᐳ"}}:::plan @@ -57,15 +60,15 @@ graph TD %% define steps subgraph "Buckets for queries/functions/computed-column-forums-messages-list-set" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 7, 9, 10, 21, 11
2: Lambda[12]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[34]
ᐳ: 6, 7, 9, 10, 21, 11
2: Lambda[12]
3: PgSelect[8]
4: PgSelectRows[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,PgFromExpression21 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 11, 21

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket + class Bucket0,__Value2,__Value4,Constant7,PgSelect8,Access9,Access10,Object11,Lambda12,PgSelectRows13,PgFromExpression21,PgSelectInlineApply34 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 8

ROOT __Item{1}ᐸ13ᐳ[14]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item14,PgSelectSingle15 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 15, 11, 21

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]
1:
ᐳ: PgClassExpression[16]
2: PgSelect[17]
3: PgSelectRows[23]
4: __ListTransform[22]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 8, 14, 15

ROOT PgSelectSingle{1}ᐸforumsᐳ[15]
1:
ᐳ: Access[35], List[36], Lambda[37]
2: PgSelectRows[23]
3: __ListTransform[22]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression16,PgSelect17,__ListTransform22,PgSelectRows23 bucket2 + class Bucket2,__ListTransform22,PgSelectRows23,Access35,List36,Lambda37 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgClassExpression{3}ᐸ__forums_m..._set_idx__ᐳ[26]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item24,PgSelectSingle25,PgClassExpression26 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.sql b/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.sql index 1de8e22bee..ef0677e5a6 100644 --- a/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.sql +++ b/grafast/dataplan-pg/__tests__/queries/functions/computed-column-forums-messages-list-set.sql @@ -1,6 +1,17 @@ select - case when (__forums__) is not distinct from null then null::text else json_build_array(((__forums__)."id"), ((__forums__)."name"), to_char(((__forums__)."archived_at"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text))::text end as "0", - __forums__."id" as "1" + __forums__."id" as "0", + array( + select array[ + __forums_messages_list_set__."body", + __forums_messages_list_set__."featured"::text, + __forums_messages_list_set_idx__::text, + __forums_messages_list_set__."id" + ]::text[] + from app_public.forums_messages_list_set(__forums__) with ordinality as __forums_messages_list_set_tmp__ (arr, __forums_messages_list_set_idx__) cross join lateral unnest (__forums_messages_list_set_tmp__.arr) as __forums_messages_list_set__ + where ( + true /* authorization checks */ + ) + )::text as "1" from app_public.forums as __forums__ where ( @@ -9,18 +20,3 @@ where __forums__.archived_at is null ) order by __forums__."id" asc; - -select __forums_messages_list_set_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::app_public.forums as "id0" from json_array_elements($1::json) with ordinality as ids) as __forums_messages_list_set_identifiers__, -lateral ( - select - __forums_messages_list_set__."body" as "0", - __forums_messages_list_set__."featured"::text as "1", - __forums_messages_list_set_idx__::text as "2", - __forums_messages_list_set__."id" as "3", - __forums_messages_list_set_identifiers__.idx as "4" - from app_public.forums_messages_list_set(__forums_messages_list_set_identifiers__."id0") with ordinality as __forums_messages_list_set_tmp__ (arr, __forums_messages_list_set_idx__) cross join lateral unnest (__forums_messages_list_set_tmp__.arr) as __forums_messages_list_set__ - where ( - true /* authorization checks */ - ) -) as __forums_messages_list_set_result__; diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.mermaid index ae9aa07119..ec3029c13b 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply71["PgSelectInlineApply[71∈0] ➊"]:::plan + Object9 & PgSelectInlineApply71 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸrelational_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda74{{"Lambda[74∈2]"}}:::plan + PgSelectRows20 & Lambda74 --> __ListTransform19 + List73{{"List[73∈2]
ᐸ11,72ᐳ"}}:::plan + Access72{{"Access[72∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access72 --> List73 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda74 --> PgSelectRows20 + PgSelect6 --> Access72 + List73 --> Lambda74 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸrelational_itemsᐳ"}}:::plan @@ -123,15 +126,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-relational/basics-with-fragments" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[71]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply71 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 72, 73, 74
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access72,List73,Lambda74 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸrelational_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.sql index 5d52c444e3..0fdeaffaf9 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics-with-fragments.sql @@ -1,35 +1,31 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __relational_items__."type"::text, + __relational_items__."id"::text, + __relational_items__."type2"::text, + __relational_items__."position"::text, + to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __relational_items__."is_explicitly_archived"::text, + to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.relational_items as __relational_items__ + where + ( + __relational_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __relational_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __relational_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_items_identifiers__, -lateral ( - select - __relational_items__."type"::text as "0", - __relational_items__."id"::text as "1", - __relational_items__."type2"::text as "2", - __relational_items__."position"::text as "3", - to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "4", - to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "5", - __relational_items__."is_explicitly_archived"::text as "6", - to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __relational_items_identifiers__.idx as "8" - from interfaces_and_unions.relational_items as __relational_items__ - where - ( - __relational_items__."author_id" = __relational_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __relational_items__."id" asc -) as __relational_items_result__; - select __relational_topics_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_topics_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.mermaid index f770cfdcbf..d4d29bcc1e 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply62["PgSelectInlineApply[62∈0] ➊"]:::plan + Object9 & PgSelectInlineApply62 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸrelational_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda65{{"Lambda[65∈2]"}}:::plan + PgSelectRows20 & Lambda65 --> __ListTransform19 + List64{{"List[64∈2]
ᐸ11,63ᐳ"}}:::plan + Access63{{"Access[63∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access63 --> List64 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda65 --> PgSelectRows20 + PgSelect6 --> Access63 + List64 --> Lambda65 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸrelational_itemsᐳ"}}:::plan @@ -105,15 +108,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-relational/basics" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[62]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply62 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 63, 64, 65
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access63,List64,Lambda65 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸrelational_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.sql index 7169739a26..e4867b00f6 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/basics.sql @@ -1,35 +1,31 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __relational_items__."type"::text, + __relational_items__."id"::text, + __relational_items__."type2"::text, + __relational_items__."position"::text, + to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __relational_items__."is_explicitly_archived"::text, + to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.relational_items as __relational_items__ + where + ( + __relational_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __relational_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __relational_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_items_identifiers__, -lateral ( - select - __relational_items__."type"::text as "0", - __relational_items__."id"::text as "1", - __relational_items__."type2"::text as "2", - __relational_items__."position"::text as "3", - to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "4", - to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "5", - __relational_items__."is_explicitly_archived"::text as "6", - to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __relational_items_identifiers__.idx as "8" - from interfaces_and_unions.relational_items as __relational_items__ - where - ( - __relational_items__."author_id" = __relational_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __relational_items__."id" asc -) as __relational_items_result__; - select __relational_topics_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_topics_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.mermaid index ccb04ab349..4d64fcc987 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply405["PgSelectInlineApply[405∈0] ➊"]:::plan + Object9 & PgSelectInlineApply405 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸrelational_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda408{{"Lambda[408∈2]"}}:::plan + PgSelectRows20 & Lambda408 --> __ListTransform19 + List407{{"List[407∈2]
ᐸ11,406ᐳ"}}:::plan + Access406{{"Access[406∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access406 --> List407 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda408 --> PgSelectRows20 + PgSelect6 --> Access406 + List407 --> Lambda408 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸrelational_itemsᐳ"}}:::plan @@ -233,15 +236,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-relational/nested-more-fragments" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[405]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply405 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 406, 407, 408
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access406,List407,Lambda408 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸrelational_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.sql index 0d1a359b3f..ca84c57e71 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more-fragments.sql @@ -1,37 +1,33 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __relational_items__."type"::text, + __relational_items__."id"::text, + __relational_items__."parent_id"::text, + __relational_items__."type2"::text, + __relational_items__."author_id"::text, + __relational_items__."position"::text, + to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __relational_items__."is_explicitly_archived"::text, + to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.relational_items as __relational_items__ + where + ( + __relational_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __relational_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __relational_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_items_identifiers__, -lateral ( - select - __relational_items__."type"::text as "0", - __relational_items__."id"::text as "1", - __relational_items__."parent_id"::text as "2", - __relational_items__."type2"::text as "3", - __relational_items__."author_id"::text as "4", - __relational_items__."position"::text as "5", - to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "6", - to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __relational_items__."is_explicitly_archived"::text as "8", - to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "9", - __relational_items_identifiers__.idx as "10" - from interfaces_and_unions.relational_items as __relational_items__ - where - ( - __relational_items__."author_id" = __relational_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __relational_items__."id" asc -) as __relational_items_result__; - select __relational_topics_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_topics_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.mermaid index bca7a32b2b..ccabacd3b2 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply387["PgSelectInlineApply[387∈0] ➊"]:::plan + Object9 & PgSelectInlineApply387 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸrelational_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda390{{"Lambda[390∈2]"}}:::plan + PgSelectRows20 & Lambda390 --> __ListTransform19 + List389{{"List[389∈2]
ᐸ11,388ᐳ"}}:::plan + Access388{{"Access[388∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access388 --> List389 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda390 --> PgSelectRows20 + PgSelect6 --> Access388 + List389 --> Lambda390 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸrelational_itemsᐳ"}}:::plan @@ -197,15 +200,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-relational/nested-more" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[387]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply387 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 388, 389, 390
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access388,List389,Lambda390 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸrelational_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.sql index f044f56fca..835eb1d271 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested-more.sql @@ -1,37 +1,33 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __relational_items__."type"::text, + __relational_items__."id"::text, + __relational_items__."parent_id"::text, + __relational_items__."type2"::text, + __relational_items__."author_id"::text, + __relational_items__."position"::text, + to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __relational_items__."is_explicitly_archived"::text, + to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.relational_items as __relational_items__ + where + ( + __relational_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __relational_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __relational_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_items_identifiers__, -lateral ( - select - __relational_items__."type"::text as "0", - __relational_items__."id"::text as "1", - __relational_items__."parent_id"::text as "2", - __relational_items__."type2"::text as "3", - __relational_items__."author_id"::text as "4", - __relational_items__."position"::text as "5", - to_char(__relational_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "6", - to_char(__relational_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __relational_items__."is_explicitly_archived"::text as "8", - to_char(__relational_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "9", - __relational_items_identifiers__.idx as "10" - from interfaces_and_unions.relational_items as __relational_items__ - where - ( - __relational_items__."author_id" = __relational_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __relational_items__."id" asc -) as __relational_items_result__; - select __relational_topics_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_topics_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.mermaid index 7131554b44..330d292a6c 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply223["PgSelectInlineApply[223∈0] ➊"]:::plan + Object9 & PgSelectInlineApply223 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸrelational_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda226{{"Lambda[226∈2]"}}:::plan + PgSelectRows20 & Lambda226 --> __ListTransform19 + List225{{"List[225∈2]
ᐸ11,224ᐳ"}}:::plan + Access224{{"Access[224∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access224 --> List225 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda226 --> PgSelectRows20 + PgSelect6 --> Access224 + List225 --> Lambda226 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸrelational_itemsᐳ"}}:::plan @@ -153,15 +156,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-relational/nested" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[223]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply223 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 224, 225, 226
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access224,List225,Lambda226 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸrelational_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.sql index ba76110b61..9cf75e3e05 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-relational/nested.sql @@ -1,31 +1,27 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __relational_items__."type"::text, + __relational_items__."id"::text, + __relational_items__."parent_id"::text, + __relational_items__."type2"::text + ]::text[] + from interfaces_and_unions.relational_items as __relational_items__ + where + ( + __relational_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __relational_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __relational_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_items_identifiers__, -lateral ( - select - __relational_items__."type"::text as "0", - __relational_items__."id"::text as "1", - __relational_items__."parent_id"::text as "2", - __relational_items__."type2"::text as "3", - __relational_items_identifiers__.idx as "4" - from interfaces_and_unions.relational_items as __relational_items__ - where - ( - __relational_items__."author_id" = __relational_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __relational_items__."id" asc -) as __relational_items_result__; - select __relational_topics_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __relational_topics_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.mermaid index d6d62de70e..f7f0803eac 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply40["PgSelectInlineApply[40∈0] ➊"]:::plan + Object9 & PgSelectInlineApply40 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸsingle_table_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda43{{"Lambda[43∈2]"}}:::plan + PgSelectRows20 & Lambda43 --> __ListTransform19 + List42{{"List[42∈2]
ᐸ11,41ᐳ"}}:::plan + Access41{{"Access[41∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access41 --> List42 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda43 --> PgSelectRows20 + PgSelect6 --> Access41 + List42 --> Lambda43 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸsingle_table_itemsᐳ"}}:::plan @@ -75,15 +78,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-single-table/basics-with-fragments" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[40]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply40 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 41, 42, 43
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access41,List42,Lambda43 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸsingle_table_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.sql index 09696dc40d..eb34225cdc 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics-with-fragments.sql @@ -1,35 +1,31 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __single_table_items__."type"::text, + __single_table_items__."id"::text, + __single_table_items__."type2"::text, + __single_table_items__."position"::text, + to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."is_explicitly_archived"::text, + to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."title", + __single_table_items__."description", + __single_table_items__."note", + __single_table_items__."color" + ]::text[] + from interfaces_and_unions.single_table_items as __single_table_items__ + where + ( + __single_table_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __single_table_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; - -select __single_table_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, -lateral ( - select - __single_table_items__."type"::text as "0", - __single_table_items__."id"::text as "1", - __single_table_items__."type2"::text as "2", - __single_table_items__."position"::text as "3", - to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "4", - to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "5", - __single_table_items__."is_explicitly_archived"::text as "6", - to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __single_table_items__."title" as "8", - __single_table_items__."description" as "9", - __single_table_items__."note" as "10", - __single_table_items__."color" as "11", - __single_table_items_identifiers__.idx as "12" - from interfaces_and_unions.single_table_items as __single_table_items__ - where - ( - __single_table_items__."author_id" = __single_table_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __single_table_items__."id" asc -) as __single_table_items_result__; diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.mermaid index f9b88d3af4..be7eafdab3 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply36["PgSelectInlineApply[36∈0] ➊"]:::plan + Object9 & PgSelectInlineApply36 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸsingle_table_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda39{{"Lambda[39∈2]"}}:::plan + PgSelectRows20 & Lambda39 --> __ListTransform19 + List38{{"List[38∈2]
ᐸ11,37ᐳ"}}:::plan + Access37{{"Access[37∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access37 --> List38 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda39 --> PgSelectRows20 + PgSelect6 --> Access37 + List38 --> Lambda39 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸsingle_table_itemsᐳ"}}:::plan @@ -67,15 +70,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-single-table/basics" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[36]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply36 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 37, 38, 39
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access37,List38,Lambda39 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸsingle_table_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.sql index 51ec4d7ed7..1c7f72144e 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/basics.sql @@ -1,31 +1,27 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __single_table_items__."type"::text, + __single_table_items__."id"::text, + __single_table_items__."type2"::text, + __single_table_items__."position"::text, + to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."is_explicitly_archived"::text, + to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.single_table_items as __single_table_items__ + where + ( + __single_table_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __single_table_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; - -select __single_table_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, -lateral ( - select - __single_table_items__."type"::text as "0", - __single_table_items__."id"::text as "1", - __single_table_items__."type2"::text as "2", - __single_table_items__."position"::text as "3", - to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "4", - to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "5", - __single_table_items__."is_explicitly_archived"::text as "6", - to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __single_table_items_identifiers__.idx as "8" - from interfaces_and_unions.single_table_items as __single_table_items__ - where - ( - __single_table_items__."author_id" = __single_table_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __single_table_items__."id" asc -) as __single_table_items_result__; diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.mermaid index 4c2af22a2e..e8b18d1146 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply251["PgSelectInlineApply[251∈0] ➊"]:::plan + Object9 & PgSelectInlineApply251 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸsingle_table_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda254{{"Lambda[254∈2]"}}:::plan + PgSelectRows20 & Lambda254 --> __ListTransform19 + List253{{"List[253∈2]
ᐸ11,252ᐳ"}}:::plan + Access252{{"Access[252∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access252 --> List253 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda254 --> PgSelectRows20 + PgSelect6 --> Access252 + List253 --> Lambda254 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸsingle_table_itemsᐳ"}}:::plan @@ -135,15 +138,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-single-table/nested-more-fragments" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[251]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply251 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 252, 253, 254
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access252,List253,Lambda254 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸsingle_table_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.sql index afca0589db..23d832c02d 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more-fragments.sql @@ -1,41 +1,37 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __single_table_items__."type"::text, + __single_table_items__."parent_id"::text, + __single_table_items__."id"::text, + __single_table_items__."type2"::text, + __single_table_items__."author_id"::text, + __single_table_items__."position"::text, + to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."is_explicitly_archived"::text, + to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."title", + __single_table_items__."description", + __single_table_items__."note", + __single_table_items__."color" + ]::text[] + from interfaces_and_unions.single_table_items as __single_table_items__ + where + ( + __single_table_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __single_table_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __single_table_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, -lateral ( - select - __single_table_items__."type"::text as "0", - __single_table_items__."parent_id"::text as "1", - __single_table_items__."id"::text as "2", - __single_table_items__."type2"::text as "3", - __single_table_items__."author_id"::text as "4", - __single_table_items__."position"::text as "5", - to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "6", - to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __single_table_items__."is_explicitly_archived"::text as "8", - to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "9", - __single_table_items__."title" as "10", - __single_table_items__."description" as "11", - __single_table_items__."note" as "12", - __single_table_items__."color" as "13", - __single_table_items_identifiers__.idx as "14" - from interfaces_and_unions.single_table_items as __single_table_items__ - where - ( - __single_table_items__."author_id" = __single_table_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __single_table_items__."id" asc -) as __single_table_items_result__; - select __people_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __people_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.mermaid index 24567a89d2..732117970c 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply243["PgSelectInlineApply[243∈0] ➊"]:::plan + Object9 & PgSelectInlineApply243 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸsingle_table_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda246{{"Lambda[246∈2]"}}:::plan + PgSelectRows20 & Lambda246 --> __ListTransform19 + List245{{"List[245∈2]
ᐸ11,244ᐳ"}}:::plan + Access244{{"Access[244∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access244 --> List245 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda246 --> PgSelectRows20 + PgSelect6 --> Access244 + List245 --> Lambda246 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸsingle_table_itemsᐳ"}}:::plan @@ -119,15 +122,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-single-table/nested-more" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[243]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply243 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 244, 245, 246
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access244,List245,Lambda246 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸsingle_table_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.sql index 95c8b0a0ef..fcd56b4f55 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested-more.sql @@ -1,37 +1,33 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __single_table_items__."type"::text, + __single_table_items__."parent_id"::text, + __single_table_items__."id"::text, + __single_table_items__."type2"::text, + __single_table_items__."author_id"::text, + __single_table_items__."position"::text, + to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), + __single_table_items__."is_explicitly_archived"::text, + to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) + ]::text[] + from interfaces_and_unions.single_table_items as __single_table_items__ + where + ( + __single_table_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __single_table_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __single_table_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, -lateral ( - select - __single_table_items__."type"::text as "0", - __single_table_items__."parent_id"::text as "1", - __single_table_items__."id"::text as "2", - __single_table_items__."type2"::text as "3", - __single_table_items__."author_id"::text as "4", - __single_table_items__."position"::text as "5", - to_char(__single_table_items__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "6", - to_char(__single_table_items__."updated_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "7", - __single_table_items__."is_explicitly_archived"::text as "8", - to_char(__single_table_items__."archived_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "9", - __single_table_items_identifiers__.idx as "10" - from interfaces_and_unions.single_table_items as __single_table_items__ - where - ( - __single_table_items__."author_id" = __single_table_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __single_table_items__."id" asc -) as __single_table_items_result__; - select __people_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __people_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.mermaid b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.mermaid index ae78bff875..49114e960d 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.mermaid @@ -9,12 +9,13 @@ graph TD %% plan dependencies + PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan Object9{{"Object[9∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + PgSelectInlineApply77["PgSelectInlineApply[77∈0] ➊"]:::plan + Object9 & PgSelectInlineApply77 --> PgSelect6 Access7{{"Access[7∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access7 & Access8 --> Object9 - PgSelect6[["PgSelect[6∈0] ➊
ᐸpeopleᐳ"]]:::plan - Object9 --> PgSelect6 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access7 __Value2 --> Access8 @@ -25,16 +26,18 @@ graph TD PgSelectRows10 ==> __Item11 PgSelectSingle12{{"PgSelectSingle[12∈1]
ᐸpeopleᐳ"}}:::plan __Item11 --> PgSelectSingle12 - PgSelect15[["PgSelect[15∈2]
ᐸsingle_table_itemsᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈2]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object9 & PgClassExpression14 --> PgSelect15 __ListTransform19[["__ListTransform[19∈2]
ᐸeach:15ᐳ"]]:::plan PgSelectRows20[["PgSelectRows[20∈2]"]]:::plan - PgSelectRows20 & PgSelect15 --> __ListTransform19 + Lambda80{{"Lambda[80∈2]"}}:::plan + PgSelectRows20 & Lambda80 --> __ListTransform19 + List79{{"List[79∈2]
ᐸ11,78ᐳ"}}:::plan + Access78{{"Access[78∈2] ➊
ᐸ6.m.subqueryDetailsFor15ᐳ"}}:::plan + __Item11 & Access78 --> List79 PgClassExpression13{{"PgClassExpression[13∈2]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle12 --> PgClassExpression13 - PgSelectSingle12 --> PgClassExpression14 - PgSelect15 --> PgSelectRows20 + Lambda80 --> PgSelectRows20 + PgSelect6 --> Access78 + List79 --> Lambda80 __Item21[/"__Item[21∈3]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 -.-> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈3]
ᐸsingle_table_itemsᐳ"}}:::plan @@ -75,15 +78,15 @@ graph TD %% define steps subgraph "Buckets for queries/interfaces-single-table/nested" - Bucket0("Bucket 0 (root)

1:
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[77]
ᐳ: Access[7], Access[8], Object[9]
2: PgSelect[6]
3: PgSelectRows[10]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect6,Access7,Access8,Object9,PgSelectRows10,PgSelectInlineApply77 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 6, 9

ROOT __Item{1}ᐸ10ᐳ[11]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item11,PgSelectSingle12 bucket1 - Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 14
2: PgSelect[15]
3: PgSelectRows[20]
4: __ListTransform[19]"):::bucket + Bucket2("Bucket 2 (nullableBoundary)
Deps: 12, 6, 11, 9

ROOT PgSelectSingle{1}ᐸpeopleᐳ[12]
1:
ᐳ: 13, 78, 79, 80
2: PgSelectRows[20]
3: __ListTransform[19]"):::bucket classDef bucket2 stroke:#7f007f - class Bucket2,PgClassExpression13,PgClassExpression14,PgSelect15,__ListTransform19,PgSelectRows20 bucket2 + class Bucket2,PgClassExpression13,__ListTransform19,PgSelectRows20,Access78,List79,Lambda80 bucket2 Bucket3("Bucket 3 (subroutine)

ROOT PgSelectSingle{3}ᐸsingle_table_itemsᐳ[22]"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,__Item21,PgSelectSingle22 bucket3 diff --git a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.sql b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.sql index 4c02db104d..e5bc7317a4 100644 --- a/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.sql +++ b/grafast/dataplan-pg/__tests__/queries/interfaces-single-table/nested.sql @@ -1,31 +1,27 @@ select __people__."username" as "0", - __people__."person_id"::text as "1" + array( + select array[ + __single_table_items__."type"::text, + __single_table_items__."parent_id"::text, + __single_table_items__."id"::text, + __single_table_items__."type2"::text + ]::text[] + from interfaces_and_unions.single_table_items as __single_table_items__ + where + ( + __single_table_items__."author_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __single_table_items__."id" asc + )::text as "1" from interfaces_and_unions.people as __people__ where ( true /* authorization checks */ ) order by __people__."person_id" asc; -select __single_table_items_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, -lateral ( - select - __single_table_items__."type"::text as "0", - __single_table_items__."parent_id"::text as "1", - __single_table_items__."id"::text as "2", - __single_table_items__."type2"::text as "3", - __single_table_items_identifiers__.idx as "4" - from interfaces_and_unions.single_table_items as __single_table_items__ - where - ( - __single_table_items__."author_id" = __single_table_items_identifiers__."id0" - ) and ( - true /* authorization checks */ - ) - order by __single_table_items__."id" asc -) as __single_table_items_result__; - select __single_table_items_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __single_table_items_identifiers__, lateral ( diff --git a/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.mermaid b/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.mermaid index fd81651cb7..60e2091051 100644 --- a/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.mermaid +++ b/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.mermaid @@ -11,8 +11,9 @@ graph TD %% plan dependencies PgSelect7[["PgSelect[7∈0] ➊
ᐸpeopleᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Constant83{{"Constant[83∈0] ➊
ᐸ2ᐳ"}}:::plan - Object10 & Constant83 --> PgSelect7 + Constant87{{"Constant[87∈0] ➊
ᐸ2ᐳ"}}:::plan + PgSelectInlineApply83["PgSelectInlineApply[83∈0] ➊"]:::plan + Object10 & Constant87 & PgSelectInlineApply83 --> PgSelect7 Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 @@ -26,14 +27,18 @@ graph TD PgSelectSingle13{{"PgSelectSingle[13∈0] ➊
ᐸpeopleᐳ"}}:::plan First11 --> PgSelectSingle13 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - PgSelect16[["PgSelect[16∈1] ➊
ᐸperson_bookmarksᐳ"]]:::plan + List85{{"List[85∈1] ➊
ᐸ11,84ᐳ"}}:::plan + Access84{{"Access[84∈1] ➊
ᐸ7.m.subqueryDetailsFor16ᐳ"}}:::plan + First11 & Access84 --> List85 PgClassExpression14{{"PgClassExpression[14∈1] ➊
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object10 & PgClassExpression14 --> PgSelect16 PgSelectSingle13 --> PgClassExpression14 PgClassExpression15{{"PgClassExpression[15∈1] ➊
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression15 PgSelectRows20[["PgSelectRows[20∈1] ➊"]]:::plan - PgSelect16 --> PgSelectRows20 + Lambda86{{"Lambda[86∈1] ➊"}}:::plan + Lambda86 --> PgSelectRows20 + PgSelect7 --> Access84 + List85 --> Lambda86 __Item21[/"__Item[21∈2]
ᐸ20ᐳ"\]:::itemplan PgSelectRows20 ==> __Item21 PgSelectSingle22{{"PgSelectSingle[22∈2]
ᐸperson_bookmarksᐳ"}}:::plan @@ -140,12 +145,12 @@ graph TD %% define steps subgraph "Buckets for queries/unions-table/bookmarks" - Bucket0("Bucket 0 (root)

1:
ᐳ: 8, 9, 83, 10
2: PgSelect[7]
3: PgSelectRows[12]
ᐳ: First[11], PgSelectSingle[13]"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[83]
ᐳ: 8, 9, 87, 10
2: PgSelect[7]
3: PgSelectRows[12]
ᐳ: First[11], PgSelectSingle[13]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,Constant83 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 10

ROOT PgSelectSingleᐸpeopleᐳ[13]
1:
ᐳ: 14, 15
2: PgSelect[16]
3: PgSelectRows[20]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,PgSelectInlineApply83,Constant87 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 7, 11, 10

ROOT PgSelectSingleᐸpeopleᐳ[13]
1:
ᐳ: 14, 15, 84, 85, 86
2: PgSelectRows[20]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgClassExpression14,PgClassExpression15,PgSelect16,PgSelectRows20 bucket1 + class Bucket1,PgClassExpression14,PgClassExpression15,PgSelectRows20,Access84,List85,Lambda86 bucket1 Bucket2("Bucket 2 (listItem)
Deps: 10

ROOT __Item{2}ᐸ20ᐳ[21]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item21,PgSelectSingle22 bucket2 diff --git a/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.sql b/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.sql index da4b804c1a..2107aac6c5 100644 --- a/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.sql +++ b/grafast/dataplan-pg/__tests__/queries/unions-table/bookmarks.deopt.sql @@ -1,6 +1,24 @@ select __people__."person_id"::text as "0", - __people__."username" as "1" + __people__."username" as "1", + array( + select array[ + __person_bookmarks__."id"::text, + __person_bookmarks__."person_id"::text, + __person_bookmarks__."bookmarked_entity"::text, + ((__person_bookmarks__."bookmarked_entity")."person_id")::text, + ((__person_bookmarks__."bookmarked_entity")."post_id")::text, + ((__person_bookmarks__."bookmarked_entity")."comment_id")::text + ]::text[] + from interfaces_and_unions.person_bookmarks as __person_bookmarks__ + where + ( + __person_bookmarks__."person_id" = __people__."person_id" + ) and ( + true /* authorization checks */ + ) + order by __person_bookmarks__."id" asc + )::text as "2" from interfaces_and_unions.people as __people__ where ( @@ -9,22 +27,6 @@ where true /* authorization checks */ ); -select - __person_bookmarks__."id"::text as "0", - __person_bookmarks__."person_id"::text as "1", - __person_bookmarks__."bookmarked_entity"::text as "2", - ((__person_bookmarks__."bookmarked_entity")."person_id")::text as "3", - ((__person_bookmarks__."bookmarked_entity")."post_id")::text as "4", - ((__person_bookmarks__."bookmarked_entity")."comment_id")::text as "5" -from interfaces_and_unions.person_bookmarks as __person_bookmarks__ -where - ( - __person_bookmarks__."person_id" = $1::"int4" - ) and ( - true /* authorization checks */ - ) -order by __person_bookmarks__."id" asc; - select __people_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __people_identifiers__, lateral ( diff --git a/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.mermaid b/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.mermaid index 145d621101..b6d383d66f 100644 --- a/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.mermaid +++ b/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.mermaid @@ -10,30 +10,30 @@ graph TD %% plan dependencies __InputObject6{{"__InputObject[6∈0] ➊"}}:::plan - Constant317{{"Constant[317∈0] ➊
ᐸ10ᐳ"}}:::plan - Constant318{{"Constant[318∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant317 & Constant318 --> __InputObject6 + Constant321{{"Constant[321∈0] ➊
ᐸ10ᐳ"}}:::plan + Constant322{{"Constant[322∈0] ➊
ᐸ5ᐳ"}}:::plan + Constant321 & Constant322 --> __InputObject6 __InputObject47{{"__InputObject[47∈0] ➊"}}:::plan - Constant319{{"Constant[319∈0] ➊
ᐸ1ᐳ"}}:::plan - Constant320{{"Constant[320∈0] ➊
ᐸ'test'ᐳ"}}:::plan - Constant319 & Constant320 --> __InputObject47 + Constant323{{"Constant[323∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant324{{"Constant[324∈0] ➊
ᐸ'test'ᐳ"}}:::plan + Constant323 & Constant324 --> __InputObject47 __InputObject102{{"__InputObject[102∈0] ➊"}}:::plan - Constant319 & Constant320 --> __InputObject102 + Constant323 & Constant324 --> __InputObject102 Object13{{"Object[13∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Access11{{"Access[11∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access12{{"Access[12∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access11 & Access12 --> Object13 PgFromExpression14{{"PgFromExpression[14∈0] ➊"}}:::plan - Constant317 & Constant318 --> PgFromExpression14 + Constant321 & Constant322 --> PgFromExpression14 __InputObject21{{"__InputObject[21∈0] ➊"}}:::plan - Constant317 --> __InputObject21 + Constant321 --> __InputObject21 __InputObject168{{"__InputObject[168∈0] ➊"}}:::plan - Constant317 --> __InputObject168 + Constant321 --> __InputObject168 __InputObject288{{"__InputObject[288∈0] ➊"}}:::plan - Constant321{{"Constant[321∈0] ➊
ᐸ20ᐳ"}}:::plan - Constant321 --> __InputObject288 + Constant325{{"Constant[325∈0] ➊
ᐸ20ᐳ"}}:::plan + Constant325 --> __InputObject288 __InputObject303{{"__InputObject[303∈0] ➊"}}:::plan - Constant321 --> __InputObject303 + Constant325 --> __InputObject303 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access11 __Value2 --> Access12 @@ -102,7 +102,7 @@ graph TD Access25 & Access26 --> Object27 __Value2 --> Access25 __Value2 --> Access26 - Constant317 --> PgFromExpression28 + Constant321 --> PgFromExpression28 First29{{"First[29∈3] ➊"}}:::plan PgSelectRows30[["PgSelectRows[30∈3] ➊"]]:::plan PgSelectRows30 --> First29 @@ -138,7 +138,7 @@ graph TD Access52{{"Access[52∈7] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access53{{"Access[53∈7] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access52 & Access53 --> Object54 - Constant319 & Constant320 --> PgFromExpression55 + Constant323 & Constant324 --> PgFromExpression55 __Value2 --> Access52 __Value2 --> Access53 First56{{"First[56∈7] ➊"}}:::plan @@ -150,12 +150,13 @@ graph TD Object59{{"Object[59∈7] ➊
ᐸ{result}ᐳ"}}:::plan PgSelectSingle58 --> Object59 Connection92{{"Connection[92∈8] ➊
ᐸ88ᐳ"}}:::plan + PgSelect75[["PgSelect[75∈9] ➊
ᐸpersonᐳ"]]:::plan + PgFromExpression77{{"PgFromExpression[77∈9] ➊"}}:::plan + PgSelectInlineApply317["PgSelectInlineApply[317∈9] ➊"]:::plan + Object54 & PgFromExpression77 & PgSelectInlineApply317 --> PgSelect75 PgSelect63[["PgSelect[63∈9] ➊
ᐸfrmcdc_compoundTypeᐳ"]]:::plan PgFromExpression67{{"PgFromExpression[67∈9] ➊"}}:::plan Object54 & PgFromExpression67 --> PgSelect63 - PgSelect75[["PgSelect[75∈9] ➊
ᐸpersonᐳ"]]:::plan - PgFromExpression77{{"PgFromExpression[77∈9] ➊"}}:::plan - Object54 & PgFromExpression77 --> PgSelect75 PgClassExpression61{{"PgClassExpression[61∈9] ➊
ᐸ__mutation...plex__.”x”ᐳ"}}:::plan PgSelectSingle58 --> PgClassExpression61 PgClassExpression62{{"PgClassExpression[62∈9] ➊
ᐸ__mutation...plex__.”y”ᐳ"}}:::plan @@ -182,18 +183,22 @@ graph TD PgSelectSingle70 --> PgClassExpression72 PgClassExpression73{{"PgClassExpression[73∈10] ➊
ᐸ__frmcdc_c...type__.”c”ᐳ"}}:::plan PgSelectSingle70 --> PgClassExpression73 - PgSelect94[["PgSelect[94∈11] ➊
ᐸpostᐳ"]]:::plan - PgClassExpression82{{"PgClassExpression[82∈11] ➊
ᐸ__person__.”id”ᐳ"}}:::plan - Object54 & PgClassExpression82 & Connection92 --> PgSelect94 List83{{"List[83∈11] ➊
ᐸ81,82ᐳ"}}:::plan + PgClassExpression82{{"PgClassExpression[82∈11] ➊
ᐸ__person__.”id”ᐳ"}}:::plan Constant81 & PgClassExpression82 --> List83 + List319{{"List[319∈11] ➊
ᐸ78,318ᐳ"}}:::plan + Access318{{"Access[318∈11] ➊
ᐸ75.m.subqueryDetailsFor94ᐳ"}}:::plan + First78 & Access318 --> List319 PgSelectSingle80 --> PgClassExpression82 Lambda84{{"Lambda[84∈11] ➊
ᐸbase64JSONEncodeᐳ"}}:::plan List83 --> Lambda84 PgClassExpression85{{"PgClassExpression[85∈11] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle80 --> PgClassExpression85 PgSelectRows95[["PgSelectRows[95∈11] ➊"]]:::plan - PgSelect94 --> PgSelectRows95 + Lambda320{{"Lambda[320∈11] ➊"}}:::plan + Lambda320 --> PgSelectRows95 + PgSelect75 --> Access318 + List319 --> Lambda320 __Item96[/"__Item[96∈12]
ᐸ95ᐳ"\]:::itemplan PgSelectRows95 ==> __Item96 PgSelectSingle97{{"PgSelectSingle[97∈12]
ᐸpostᐳ"}}:::plan @@ -211,7 +216,7 @@ graph TD Access106{{"Access[106∈14] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access107{{"Access[107∈14] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access106 & Access107 --> Object108 - Constant319 & Constant320 --> PgFromExpression109 + Constant323 & Constant324 --> PgFromExpression109 __Value2 --> Access106 __Value2 --> Access107 Object110{{"Object[110∈14] ➊
ᐸ{result}ᐳ"}}:::plan @@ -304,7 +309,7 @@ graph TD Access172 & Access173 --> Object174 __Value2 --> Access172 __Value2 --> Access173 - Constant317 --> PgFromExpression175 + Constant321 --> PgFromExpression175 First176{{"First[176∈25] ➊"}}:::plan PgSelectRows177[["PgSelectRows[177∈25] ➊"]]:::plan PgSelectRows177 --> First176 @@ -484,7 +489,7 @@ graph TD Access292 & Access293 --> Object294 __Value2 --> Access292 __Value2 --> Access293 - Constant321 --> PgFromExpression295 + Constant325 --> PgFromExpression295 Object296{{"Object[296∈51] ➊
ᐸ{result}ᐳ"}}:::plan PgSelect291 --> Object296 PgSelectRows298[["PgSelectRows[298∈52] ➊"]]:::plan @@ -506,7 +511,7 @@ graph TD Access307 & Access308 --> Object309 __Value2 --> Access307 __Value2 --> Access308 - Constant321 --> PgFromExpression310 + Constant325 --> PgFromExpression310 Object311{{"Object[311∈55] ➊
ᐸ{result}ᐳ"}}:::plan PgSelect306 --> Object311 PgSelectRows313[["PgSelectRows[313∈56] ➊"]]:::plan @@ -523,14 +528,14 @@ graph TD subgraph "Buckets for mutations/v4/mutation-return-types" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,__InputObject6,Access11,Access12,Object13,PgFromExpression14,ApplyInput20,__InputObject21,ApplyInput34,__InputObject35,ApplyInput46,__InputObject47,ApplyInput60,Constant81,Constant98,__InputObject102,ApplyInput111,__InputObject156,ApplyInput165,__InputObject168,ApplyInput180,__InputObject194,ApplyInput201,__InputObject207,ApplyInput217,__InputObject220,ApplyInput227,__InputObject232,ApplyInput242,__InputObject247,ApplyInput254,__InputObject262,ApplyInput273,__InputObject274,ApplyInput284,__InputObject288,ApplyInput297,__InputObject303,ApplyInput312,Constant317,Constant318,Constant319,Constant320,Constant321 bucket0 + class Bucket0,__Value2,__Value4,__InputObject6,Access11,Access12,Object13,PgFromExpression14,ApplyInput20,__InputObject21,ApplyInput34,__InputObject35,ApplyInput46,__InputObject47,ApplyInput60,Constant81,Constant98,__InputObject102,ApplyInput111,__InputObject156,ApplyInput165,__InputObject168,ApplyInput180,__InputObject194,ApplyInput201,__InputObject207,ApplyInput217,__InputObject220,ApplyInput227,__InputObject232,ApplyInput242,__InputObject247,ApplyInput254,__InputObject262,ApplyInput273,__InputObject274,ApplyInput284,__InputObject288,ApplyInput297,__InputObject303,ApplyInput312,Constant321,Constant322,Constant323,Constant324,Constant325 bucket0 Bucket1("Bucket 1 (mutationField)
Deps: 13, 14, 20

1: PgSelect[10]
2: PgSelectRows[16]
ᐳ: 15, 17, 18, 19"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,PgSelect10,First15,PgSelectRows16,PgSelectSingle17,PgClassExpression18,Object19 bucket1 Bucket2("Bucket 2 (nullableBoundary)
Deps: 19, 18

ROOT Object{1}ᐸ{result}ᐳ[19]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2 bucket2 - Bucket3("Bucket 3 (mutationField)
Deps: 34, 2, 317

1: Access[25]
2: Access[26]
3: Object[27]
4: PgFromExpression[28]
5: PgSelect[24]
6: PgSelectRows[30]
ᐳ: 29, 31, 32, 33"):::bucket + Bucket3("Bucket 3 (mutationField)
Deps: 34, 2, 321

1: Access[25]
2: Access[26]
3: Object[27]
4: PgFromExpression[28]
5: PgSelect[24]
6: PgSelectRows[30]
ᐳ: 29, 31, 32, 33"):::bucket classDef bucket3 stroke:#ffa500 class Bucket3,PgSelect24,Access25,Access26,Object27,PgFromExpression28,First29,PgSelectRows30,PgSelectSingle31,PgClassExpression32,Object33 bucket3 Bucket4("Bucket 4 (nullableBoundary)
Deps: 33, 32

ROOT Object{3}ᐸ{result}ᐳ[33]"):::bucket @@ -542,28 +547,28 @@ graph TD Bucket6("Bucket 6 (nullableBoundary)
Deps: 45, 44

ROOT Object{5}ᐸ{result}ᐳ[45]"):::bucket classDef bucket6 stroke:#ff1493 class Bucket6 bucket6 - Bucket7("Bucket 7 (mutationField)
Deps: 60, 2, 319, 320, 7, 81, 98

1: Access[52]
2: Access[53]
3: Object[54]
4: PgFromExpression[55]
5: PgSelect[51]
6: PgSelectRows[57]
ᐳ: 56, 58, 59"):::bucket + Bucket7("Bucket 7 (mutationField)
Deps: 60, 2, 323, 324, 7, 81, 98

1: Access[52]
2: Access[53]
3: Object[54]
4: PgFromExpression[55]
5: PgSelect[51]
6: PgSelectRows[57]
ᐳ: 56, 58, 59"):::bucket classDef bucket7 stroke:#808000 class Bucket7,PgSelect51,Access52,Access53,Object54,PgFromExpression55,First56,PgSelectRows57,PgSelectSingle58,Object59 bucket7 Bucket8("Bucket 8 (nullableBoundary)
Deps: 7, 59, 58, 54, 81, 98

ROOT Object{7}ᐸ{result}ᐳ[59]"):::bucket classDef bucket8 stroke:#dda0dd class Bucket8,Connection92 bucket8 - Bucket9("Bucket 9 (nullableBoundary)
Deps: 58, 54, 81, 92, 7, 98

ROOT PgSelectSingle{7}ᐸmutation_out_complexᐳ[58]
1:
ᐳ: 61, 62, 74, 67, 77
2: PgSelect[63], PgSelect[75]
3: PgSelectRows[69], PgSelectRows[79]
ᐳ: 68, 70, 78, 80"):::bucket + Bucket9("Bucket 9 (nullableBoundary)
Deps: 58, 54, 7, 81, 98, 92

ROOT PgSelectSingle{7}ᐸmutation_out_complexᐳ[58]
1: PgSelectInlineApply[317]
ᐳ: 61, 62, 74, 67, 77
2: PgSelect[63], PgSelect[75]
3: PgSelectRows[69], PgSelectRows[79]
ᐳ: 68, 70, 78, 80"):::bucket classDef bucket9 stroke:#ff0000 - class Bucket9,PgClassExpression61,PgClassExpression62,PgSelect63,PgFromExpression67,First68,PgSelectRows69,PgSelectSingle70,PgClassExpression74,PgSelect75,PgFromExpression77,First78,PgSelectRows79,PgSelectSingle80 bucket9 + class Bucket9,PgClassExpression61,PgClassExpression62,PgSelect63,PgFromExpression67,First68,PgSelectRows69,PgSelectSingle70,PgClassExpression74,PgSelect75,PgFromExpression77,First78,PgSelectRows79,PgSelectSingle80,PgSelectInlineApply317 bucket9 Bucket10("Bucket 10 (nullableBoundary)
Deps: 70

ROOT PgSelectSingle{9}ᐸfrmcdc_compoundTypeᐳ[70]"):::bucket classDef bucket10 stroke:#ffff00 class Bucket10,PgClassExpression71,PgClassExpression72,PgClassExpression73 bucket10 - Bucket11("Bucket 11 (nullableBoundary)
Deps: 80, 81, 54, 92, 7, 98

ROOT PgSelectSingle{9}ᐸpersonᐳ[80]
1:
ᐳ: 82, 85, 83, 84
2: PgSelect[94]
3: PgSelectRows[95]"):::bucket + Bucket11("Bucket 11 (nullableBoundary)
Deps: 80, 81, 75, 78, 98, 92

ROOT PgSelectSingle{9}ᐸpersonᐳ[80]
1:
ᐳ: 82, 85, 318, 83, 84, 319, 320
2: PgSelectRows[95]"):::bucket classDef bucket11 stroke:#00ffff - class Bucket11,PgClassExpression82,List83,Lambda84,PgClassExpression85,PgSelect94,PgSelectRows95 bucket11 + class Bucket11,PgClassExpression82,List83,Lambda84,PgClassExpression85,PgSelectRows95,Access318,List319,Lambda320 bucket11 Bucket12("Bucket 12 (listItem)
Deps: 98

ROOT __Item{12}ᐸ95ᐳ[96]"):::bucket classDef bucket12 stroke:#4169e1 class Bucket12,__Item96,PgSelectSingle97 bucket12 Bucket13("Bucket 13 (nullableBoundary)
Deps: 97, 98

ROOT PgSelectSingle{12}ᐸpostᐳ[97]"):::bucket classDef bucket13 stroke:#3cb371 class Bucket13,PgClassExpression99,List100,Lambda101 bucket13 - Bucket14("Bucket 14 (mutationField)
Deps: 111, 2, 319, 320, 7, 81, 98

1: Access[106]
2: Access[107]
3: Object[108]
4: PgFromExpression[109]
5: PgSelect[105]
6:
ᐳ: Object[110]"):::bucket + Bucket14("Bucket 14 (mutationField)
Deps: 111, 2, 323, 324, 7, 81, 98

1: Access[106]
2: Access[107]
3: Object[108]
4: PgFromExpression[109]
5: PgSelect[105]
6:
ᐳ: Object[110]"):::bucket classDef bucket14 stroke:#a52a2a class Bucket14,PgSelect105,Access106,Access107,Object108,PgFromExpression109,Object110 bucket14 Bucket15("Bucket 15 (nullableBoundary)
Deps: 105, 7, 110, 108, 81, 98

ROOT Object{14}ᐸ{result}ᐳ[110]"):::bucket @@ -596,7 +601,7 @@ graph TD Bucket24("Bucket 24 (nullableBoundary)
Deps: 163

ROOT PgSelectSingle{22}ᐸmutation_out_outᐳ[163]"):::bucket classDef bucket24 stroke:#808000 class Bucket24,PgClassExpression166,PgClassExpression167 bucket24 - Bucket25("Bucket 25 (mutationField)
Deps: 180, 2, 317

1: Access[172]
2: Access[173]
3: Object[174]
4: PgFromExpression[175]
5: PgSelect[171]
6: PgSelectRows[177]
ᐳ: 176, 178, 179"):::bucket + Bucket25("Bucket 25 (mutationField)
Deps: 180, 2, 321

1: Access[172]
2: Access[173]
3: Object[174]
4: PgFromExpression[175]
5: PgSelect[171]
6: PgSelectRows[177]
ᐳ: 176, 178, 179"):::bucket classDef bucket25 stroke:#dda0dd class Bucket25,PgSelect171,Access172,Access173,Object174,PgFromExpression175,First176,PgSelectRows177,PgSelectSingle178,Object179 bucket25 Bucket26("Bucket 26 (nullableBoundary)
Deps: 179, 178, 174

ROOT Object{25}ᐸ{result}ᐳ[179]"):::bucket @@ -674,7 +679,7 @@ graph TD Bucket50("Bucket 50 (nullableBoundary)
Deps: 282

ROOT PgSelectSingle{48}ᐸmutation_out_unnamed_out_out_unnamedᐳ[282]"):::bucket classDef bucket50 stroke:#f5deb3 class Bucket50,PgClassExpression285,PgClassExpression286,PgClassExpression287 bucket50 - Bucket51("Bucket 51 (mutationField)
Deps: 297, 2, 321

1: Access[292]
2: Access[293]
3: Object[294]
4: PgFromExpression[295]
5: PgSelect[291]
6:
ᐳ: Object[296]"):::bucket + Bucket51("Bucket 51 (mutationField)
Deps: 297, 2, 325

1: Access[292]
2: Access[293]
3: Object[294]
4: PgFromExpression[295]
5: PgSelect[291]
6:
ᐳ: Object[296]"):::bucket classDef bucket51 stroke:#696969 class Bucket51,PgSelect291,Access292,Access293,Object294,PgFromExpression295,Object296 bucket51 Bucket52("Bucket 52 (nullableBoundary)
Deps: 291, 296

ROOT Object{51}ᐸ{result}ᐳ[296]"):::bucket @@ -686,7 +691,7 @@ graph TD Bucket54("Bucket 54 (nullableBoundary)
Deps: 300

ROOT PgSelectSingle{53}ᐸmutation_returns_table_multi_colᐳ[300]"):::bucket classDef bucket54 stroke:#ffa500 class Bucket54,PgClassExpression301,PgClassExpression302 bucket54 - Bucket55("Bucket 55 (mutationField)
Deps: 312, 2, 321

1: Access[307]
2: Access[308]
3: Object[309]
4: PgFromExpression[310]
5: PgSelect[306]
6:
ᐳ: Object[311]"):::bucket + Bucket55("Bucket 55 (mutationField)
Deps: 312, 2, 325

1: Access[307]
2: Access[308]
3: Object[309]
4: PgFromExpression[310]
5: PgSelect[306]
6:
ᐳ: Object[311]"):::bucket classDef bucket55 stroke:#0000ff class Bucket55,PgSelect306,Access307,Access308,Object309,PgFromExpression310,Object311 bucket55 Bucket56("Bucket 56 (nullableBoundary)
Deps: 306, 311

ROOT Object{55}ᐸ{result}ᐳ[311]"):::bucket diff --git a/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.sql b/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.sql index 2440bb7155..42dca0d66e 100644 --- a/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.sql +++ b/postgraphile/postgraphile/__tests__/mutations/v4/mutation-return-types.sql @@ -32,17 +32,19 @@ from (select ($1::"c"."compound_type").*) as __frmcdc_compound_type__; select __person__."id"::text as "0", - __person__."person_full_name" as "1" + __person__."person_full_name" as "1", + array( + select array[ + __post__."id"::text + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" + ) + order by __post__."id" asc + )::text as "2" from (select ($1::"c"."person").*) as __person__; -select - __post__."id"::text as "0" -from "a"."post" as __post__ -where ( - __post__."author_id" = $1::"int4" -) -order by __post__."id" asc; - select __mutation_out_complex_setof__."x"::text as "0", case when (__mutation_out_complex_setof__."y") is not distinct from null then null::text else json_build_array((((__mutation_out_complex_setof__."y")."a"))::text, ((__mutation_out_complex_setof__."y")."b"), (((__mutation_out_complex_setof__."y")."c"))::text, ((__mutation_out_complex_setof__."y")."d"), (((__mutation_out_complex_setof__."y")."e"))::text, (((__mutation_out_complex_setof__."y")."f"))::text, to_char(((__mutation_out_complex_setof__."y")."g"), 'YYYY_MM_DD_HH24_MI_SS.US'::text), (((__mutation_out_complex_setof__."y")."foo_bar"))::text)::text end as "1", diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.mermaid b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.mermaid index 635a2905fc..3734d228c5 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.mermaid @@ -10,9 +10,9 @@ graph TD %% plan dependencies Connection14{{"Connection[14∈0] ➊
ᐸ10ᐳ"}}:::plan - Constant35{{"Constant[35∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant39{{"Constant[39∈0] ➊
ᐸ2ᐳ"}}:::plan Lambda15{{"Lambda[15∈0] ➊
ᐸparseCursorᐳ"}}:::plan - Constant35 & Lambda15 --> Connection14 + Constant39 & Lambda15 --> Connection14 Object13{{"Object[13∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Access11{{"Access[11∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access12{{"Access[12∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan @@ -20,12 +20,14 @@ graph TD __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access11 __Value2 --> Access12 - Constant36{{"Constant[36∈0] ➊
ᐸ'WyI5NjdkZTdmYTdlIiwzXQ=='ᐳ"}}:::plan - Constant36 --> Lambda15 + Constant40{{"Constant[40∈0] ➊
ᐸ'WyI5NjdkZTdmYTdlIiwzXQ=='ᐳ"}}:::plan + Constant40 --> Lambda15 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - Constant37{{"Constant[37∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant41{{"Constant[41∈0] ➊
ᐸ1ᐳ"}}:::plan PgSelect17[["PgSelect[17∈1] ➊
ᐸpeopleᐳ"]]:::plan - Object13 & Connection14 & Lambda15 & Constant35 --> PgSelect17 + PgSelectInlineApply35["PgSelectInlineApply[35∈1] ➊"]:::plan + Object13 & Connection14 & Lambda15 & Constant39 & PgSelectInlineApply35 --> PgSelect17 + Constant41 --> PgSelectInlineApply35 PgSelectRows18[["PgSelectRows[18∈1] ➊"]]:::plan PgSelect17 --> PgSelectRows18 Access33{{"Access[33∈1] ➊
ᐸ17.cursorDetailsᐳ"}}:::plan @@ -34,16 +36,20 @@ graph TD PgSelectRows18 ==> __Item19 PgSelectSingle20{{"PgSelectSingle[20∈2]
ᐸpeopleᐳ"}}:::plan __Item19 --> PgSelectSingle20 - PgSelect23[["PgSelect[23∈3]
ᐸlog_entriesᐳ"]]:::plan - PgClassExpression22{{"PgClassExpression[22∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object13 & PgClassExpression22 & Constant37 --> PgSelect23 PgCursor34{{"PgCursor[34∈3]"}}:::plan PgSelectSingle20 & Access33 --> PgCursor34 + List37{{"List[37∈3]
ᐸ19,36ᐳ"}}:::plan + Access36{{"Access[36∈3] ➊
ᐸ17.m.subqueryDetailsFor23ᐳ"}}:::plan + __Item19 & Access36 --> List37 + PgClassExpression22{{"PgClassExpression[22∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan PgSelectSingle20 --> PgClassExpression22 PgSelectRows27[["PgSelectRows[27∈3]"]]:::plan - PgSelect23 --> PgSelectRows27 + Lambda38{{"Lambda[38∈3]"}}:::plan + Lambda38 --> PgSelectRows27 PgClassExpression32{{"PgClassExpression[32∈3]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle20 --> PgClassExpression32 + PgSelect17 --> Access36 + List37 --> Lambda38 __Item28[/"__Item[28∈4]
ᐸ27ᐳ"\]:::itemplan PgSelectRows27 ==> __Item28 PgSelectSingle29{{"PgSelectSingle[29∈4]
ᐸlog_entriesᐳ"}}:::plan @@ -58,16 +64,16 @@ graph TD subgraph "Buckets for queries/polymorphic/person-log-entries.after-caroline" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Access11,Access12,Object13,Connection14,Lambda15,Constant35,Constant36,Constant37 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 14, 15, 35, 7, 37

ROOT Connectionᐸ10ᐳ[14]
1: PgSelect[17]
ᐳ: Access[33]
2: PgSelectRows[18]"):::bucket + class Bucket0,__Value2,__Value4,Access11,Access12,Object13,Connection14,Lambda15,Constant39,Constant40,Constant41 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 14, 15, 39, 7, 41

ROOT Connectionᐸ10ᐳ[14]
1: PgSelectInlineApply[35]
2: PgSelect[17]
ᐳ: Access[33]
3: PgSelectRows[18]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect17,PgSelectRows18,Access33 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 13, 37, 7, 33

ROOT __Item{2}ᐸ18ᐳ[19]"):::bucket + class Bucket1,PgSelect17,PgSelectRows18,Access33,PgSelectInlineApply35 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 33, 17

ROOT __Item{2}ᐸ18ᐳ[19]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item19,PgSelectSingle20 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 20, 13, 37, 7, 33

ROOT PgSelectSingle{2}ᐸpeopleᐳ[20]
1:
ᐳ: 22, 32, 34
2: PgSelect[23]
3: PgSelectRows[27]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 20, 33, 17, 19

ROOT PgSelectSingle{2}ᐸpeopleᐳ[20]
1:
ᐳ: 22, 32, 34, 36, 37, 38
2: PgSelectRows[27]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression22,PgSelect23,PgSelectRows27,PgClassExpression32,PgCursor34 bucket3 + class Bucket3,PgClassExpression22,PgSelectRows27,PgClassExpression32,PgCursor34,Access36,List37,Lambda38 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ27ᐳ[28]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item28,PgSelectSingle29,PgClassExpression30,PgClassExpression31 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.sql b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.sql index 599fa6304d..eab2cdcd8f 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.sql +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.after-caroline.sql @@ -1,24 +1,21 @@ select __people__."person_id"::text as "0", - __people__."username" as "1" + __people__."username" as "1", + array( + select array[ + __log_entries__."text", + __log_entries__."id"::text + ]::text[] + from "polymorphic"."log_entries" as __log_entries__ + where ( + __log_entries__."person_id" = __people__."person_id" + ) + order by __log_entries__."id" asc + limit 1 + )::text as "2" from "polymorphic"."people" as __people__ where ( __people__."person_id" > $1::"int4" ) order by __people__."person_id" asc -limit 2; - -select __log_entries_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __log_entries_identifiers__, -lateral ( - select - __log_entries__."text" as "0", - __log_entries__."id"::text as "1", - __log_entries_identifiers__.idx as "2" - from "polymorphic"."log_entries" as __log_entries__ - where ( - __log_entries__."person_id" = __log_entries_identifiers__."id0" - ) - order by __log_entries__."id" asc - limit 1 -) as __log_entries_result__; \ No newline at end of file +limit 2; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.mermaid b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.mermaid index 352439a06a..2a58f1f237 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.mermaid @@ -11,8 +11,8 @@ graph TD %% plan dependencies Connection14{{"Connection[14∈0] ➊
ᐸ10ᐳ"}}:::plan __InputObject8{{"__InputObject[8∈0] ➊"}}:::plan - Constant34{{"Constant[34∈0] ➊
ᐸ'Dave'ᐳ"}}:::plan - Constant34 --> __InputObject8 + Constant38{{"Constant[38∈0] ➊
ᐸ'Dave'ᐳ"}}:::plan + Constant38 --> __InputObject8 Object13{{"Object[13∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Access11{{"Access[11∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access12{{"Access[12∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan @@ -24,21 +24,26 @@ graph TD __InputObject8 --> ApplyInput16 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan PgSelect17[["PgSelect[17∈1] ➊
ᐸpeopleᐳ"]]:::plan - Object13 & ApplyInput16 & Connection14 --> PgSelect17 + PgSelectInlineApply34["PgSelectInlineApply[34∈1] ➊"]:::plan + Object13 & ApplyInput16 & Connection14 & PgSelectInlineApply34 --> PgSelect17 PgSelectRows18[["PgSelectRows[18∈1] ➊"]]:::plan PgSelect17 --> PgSelectRows18 __Item19[/"__Item[19∈2]
ᐸ18ᐳ"\]:::itemplan PgSelectRows18 ==> __Item19 PgSelectSingle20{{"PgSelectSingle[20∈2]
ᐸpeopleᐳ"}}:::plan __Item19 --> PgSelectSingle20 - PgSelect23[["PgSelect[23∈3]
ᐸlog_entriesᐳ"]]:::plan + List36{{"List[36∈3]
ᐸ19,35ᐳ"}}:::plan + Access35{{"Access[35∈3] ➊
ᐸ17.m.subqueryDetailsFor23ᐳ"}}:::plan + __Item19 & Access35 --> List36 PgClassExpression22{{"PgClassExpression[22∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object13 & PgClassExpression22 --> PgSelect23 PgSelectSingle20 --> PgClassExpression22 PgSelectRows28[["PgSelectRows[28∈3]"]]:::plan - PgSelect23 --> PgSelectRows28 + Lambda37{{"Lambda[37∈3]"}}:::plan + Lambda37 --> PgSelectRows28 PgClassExpression33{{"PgClassExpression[33∈3]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle20 --> PgClassExpression33 + PgSelect17 --> Access35 + List36 --> Lambda37 __Item29[/"__Item[29∈4]
ᐸ28ᐳ"\]:::itemplan PgSelectRows28 ==> __Item29 PgSelectSingle30{{"PgSelectSingle[30∈4]
ᐸlog_entriesᐳ"}}:::plan @@ -53,16 +58,16 @@ graph TD subgraph "Buckets for queries/polymorphic/person-log-entries.condition" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,__InputObject8,Access11,Access12,Object13,Connection14,ApplyInput16,Constant34 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 16, 14, 6

ROOT Connectionᐸ10ᐳ[14]
1: PgSelect[17]
2: PgSelectRows[18]"):::bucket + class Bucket0,__Value2,__Value4,__InputObject8,Access11,Access12,Object13,Connection14,ApplyInput16,Constant38 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 16, 14, 6

ROOT Connectionᐸ10ᐳ[14]
1: PgSelectInlineApply[34]
2: PgSelect[17]
3: PgSelectRows[18]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect17,PgSelectRows18 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 13, 6

ROOT __Item{2}ᐸ18ᐳ[19]"):::bucket + class Bucket1,PgSelect17,PgSelectRows18,PgSelectInlineApply34 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 17

ROOT __Item{2}ᐸ18ᐳ[19]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item19,PgSelectSingle20 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 20, 13, 6

ROOT PgSelectSingle{2}ᐸpeopleᐳ[20]
1:
ᐳ: 22, 33
2: PgSelect[23]
3: PgSelectRows[28]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 20, 17, 19

ROOT PgSelectSingle{2}ᐸpeopleᐳ[20]
1:
ᐳ: 22, 33, 35, 36, 37
2: PgSelectRows[28]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression22,PgSelect23,PgSelectRows28,PgClassExpression33 bucket3 + class Bucket3,PgClassExpression22,PgSelectRows28,PgClassExpression33,Access35,List36,Lambda37 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ28ᐳ[29]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item29,PgSelectSingle30,PgClassExpression31,PgClassExpression32 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.sql b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.sql index 43923197a6..3368f14841 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.sql +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.condition.sql @@ -1,17 +1,19 @@ select __people__."person_id"::text as "0", - __people__."username" as "1" + __people__."username" as "1", + array( + select array[ + __log_entries__."text", + __log_entries__."id"::text + ]::text[] + from "polymorphic"."log_entries" as __log_entries__ + where ( + __log_entries__."person_id" = __people__."person_id" + ) + order by __log_entries__."text" desc, __log_entries__."id" asc + )::text as "2" from "polymorphic"."people" as __people__ where ( __people__."username" = $1::"text" ) -order by __people__."person_id" asc; - -select - __log_entries__."text" as "0", - __log_entries__."id"::text as "1" -from "polymorphic"."log_entries" as __log_entries__ -where ( - __log_entries__."person_id" = $1::"int4" -) -order by __log_entries__."text" desc, __log_entries__."id" asc; \ No newline at end of file +order by __people__."person_id" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.mermaid b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.mermaid index 8a5219e5c4..2108927ff1 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.mermaid @@ -10,8 +10,8 @@ graph TD %% plan dependencies Connection13{{"Connection[13∈0] ➊
ᐸ9ᐳ"}}:::plan - Constant33{{"Constant[33∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant33 --> Connection13 + Constant37{{"Constant[37∈0] ➊
ᐸ5ᐳ"}}:::plan + Constant37 --> Connection13 Object12{{"Object[12∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access11{{"Access[11∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan @@ -20,23 +20,29 @@ graph TD __Value2 --> Access10 __Value2 --> Access11 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - Constant34{{"Constant[34∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant38{{"Constant[38∈0] ➊
ᐸ1ᐳ"}}:::plan PgSelect15[["PgSelect[15∈1] ➊
ᐸpeopleᐳ"]]:::plan - Object12 & Connection13 & Constant33 --> PgSelect15 + PgSelectInlineApply33["PgSelectInlineApply[33∈1] ➊"]:::plan + Object12 & Connection13 & Constant37 & PgSelectInlineApply33 --> PgSelect15 + Constant38 --> PgSelectInlineApply33 PgSelectRows16[["PgSelectRows[16∈1] ➊"]]:::plan PgSelect15 --> PgSelectRows16 __Item17[/"__Item[17∈2]
ᐸ16ᐳ"\]:::itemplan PgSelectRows16 ==> __Item17 PgSelectSingle18{{"PgSelectSingle[18∈2]
ᐸpeopleᐳ"}}:::plan __Item17 --> PgSelectSingle18 - PgSelect22[["PgSelect[22∈3]
ᐸlog_entriesᐳ"]]:::plan + List35{{"List[35∈3]
ᐸ17,34ᐳ"}}:::plan + Access34{{"Access[34∈3] ➊
ᐸ15.m.subqueryDetailsFor22ᐳ"}}:::plan + __Item17 & Access34 --> List35 PgClassExpression21{{"PgClassExpression[21∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object12 & PgClassExpression21 & Constant34 --> PgSelect22 PgSelectSingle18 --> PgClassExpression21 PgSelectRows27[["PgSelectRows[27∈3]"]]:::plan - PgSelect22 --> PgSelectRows27 + Lambda36{{"Lambda[36∈3]"}}:::plan + Lambda36 --> PgSelectRows27 PgClassExpression32{{"PgClassExpression[32∈3]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle18 --> PgClassExpression32 + PgSelect15 --> Access34 + List35 --> Lambda36 __Item28[/"__Item[28∈4]
ᐸ27ᐳ"\]:::itemplan PgSelectRows27 ==> __Item28 PgSelectSingle29{{"PgSelectSingle[29∈4]
ᐸlog_entriesᐳ"}}:::plan @@ -51,16 +57,16 @@ graph TD subgraph "Buckets for queries/polymorphic/person-log-entries.last-ordered" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Access10,Access11,Object12,Connection13,Constant33,Constant34 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 12, 13, 6, 33, 34

ROOT Connectionᐸ9ᐳ[13]
1: PgSelect[15]
2: PgSelectRows[16]"):::bucket + class Bucket0,__Value2,__Value4,Access10,Access11,Object12,Connection13,Constant37,Constant38 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 12, 13, 6, 37, 38

ROOT Connectionᐸ9ᐳ[13]
1: PgSelectInlineApply[33]
2: PgSelect[15]
3: PgSelectRows[16]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect15,PgSelectRows16 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 12, 34, 6

ROOT __Item{2}ᐸ16ᐳ[17]"):::bucket + class Bucket1,PgSelect15,PgSelectRows16,PgSelectInlineApply33 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 15

ROOT __Item{2}ᐸ16ᐳ[17]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item17,PgSelectSingle18 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 18, 12, 34, 6

ROOT PgSelectSingle{2}ᐸpeopleᐳ[18]
1:
ᐳ: 21, 32
2: PgSelect[22]
3: PgSelectRows[27]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 18, 15, 17

ROOT PgSelectSingle{2}ᐸpeopleᐳ[18]
1:
ᐳ: 21, 32, 34, 35, 36
2: PgSelectRows[27]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression21,PgSelect22,PgSelectRows27,PgClassExpression32 bucket3 + class Bucket3,PgClassExpression21,PgSelectRows27,PgClassExpression32,Access34,List35,Lambda36 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ27ᐳ[28]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item28,PgSelectSingle29,PgClassExpression30,PgClassExpression31 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.sql b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.sql index 15be564285..325fba0f16 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.sql +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.last-ordered.sql @@ -1,21 +1,18 @@ select __people__."person_id"::text as "0", - __people__."username" as "1" + __people__."username" as "1", + array( + select array[ + __log_entries__."text", + __log_entries__."id"::text + ]::text[] + from "polymorphic"."log_entries" as __log_entries__ + where ( + __log_entries__."person_id" = __people__."person_id" + ) + order by __log_entries__."text" desc, __log_entries__."id" asc + limit 1 + )::text as "2" from "polymorphic"."people" as __people__ order by __people__."person_id" desc -limit 5; - -select __log_entries_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __log_entries_identifiers__, -lateral ( - select - __log_entries__."text" as "0", - __log_entries__."id"::text as "1", - __log_entries_identifiers__.idx as "2" - from "polymorphic"."log_entries" as __log_entries__ - where ( - __log_entries__."person_id" = __log_entries_identifiers__."id0" - ) - order by __log_entries__."text" desc, __log_entries__."id" asc - limit 1 -) as __log_entries_result__; \ No newline at end of file +limit 5; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.mermaid b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.mermaid index 6d5a8a76ab..e4bb335d00 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.mermaid @@ -19,7 +19,8 @@ graph TD __Value2 --> Access10 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan PgSelect14[["PgSelect[14∈1] ➊
ᐸpeopleᐳ"]]:::plan - Object11 & Connection12 --> PgSelect14 + PgSelectInlineApply31["PgSelectInlineApply[31∈1] ➊"]:::plan + Object11 & Connection12 & PgSelectInlineApply31 --> PgSelect14 PgSelectRows15[["PgSelectRows[15∈1] ➊"]]:::plan PgSelect14 --> PgSelectRows15 Access29{{"Access[29∈1] ➊
ᐸ14.cursorDetailsᐳ"}}:::plan @@ -28,16 +29,20 @@ graph TD PgSelectRows15 ==> __Item16 PgSelectSingle17{{"PgSelectSingle[17∈2]
ᐸpeopleᐳ"}}:::plan __Item16 --> PgSelectSingle17 - PgSelect19[["PgSelect[19∈3]
ᐸlog_entriesᐳ"]]:::plan - PgClassExpression18{{"PgClassExpression[18∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan - Object11 & PgClassExpression18 --> PgSelect19 PgCursor30{{"PgCursor[30∈3]"}}:::plan PgSelectSingle17 & Access29 --> PgCursor30 + List33{{"List[33∈3]
ᐸ16,32ᐳ"}}:::plan + Access32{{"Access[32∈3] ➊
ᐸ14.m.subqueryDetailsFor19ᐳ"}}:::plan + __Item16 & Access32 --> List33 + PgClassExpression18{{"PgClassExpression[18∈3]
ᐸ__people__.”person_id”ᐳ"}}:::plan PgSelectSingle17 --> PgClassExpression18 PgSelectRows23[["PgSelectRows[23∈3]"]]:::plan - PgSelect19 --> PgSelectRows23 + Lambda34{{"Lambda[34∈3]"}}:::plan + Lambda34 --> PgSelectRows23 PgClassExpression28{{"PgClassExpression[28∈3]
ᐸ__people__.”username”ᐳ"}}:::plan PgSelectSingle17 --> PgClassExpression28 + PgSelect14 --> Access32 + List33 --> Lambda34 __Item24[/"__Item[24∈4]
ᐸ23ᐳ"\]:::itemplan PgSelectRows23 ==> __Item24 PgSelectSingle25{{"PgSelectSingle[25∈4]
ᐸlog_entriesᐳ"}}:::plan @@ -53,15 +58,15 @@ graph TD Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6

ROOT Connectionᐸ8ᐳ[12]
1: PgSelect[14]
ᐳ: Access[29]
2: PgSelectRows[15]"):::bucket + Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6

ROOT Connectionᐸ8ᐳ[12]
1: PgSelectInlineApply[31]
2: PgSelect[14]
ᐳ: Access[29]
3: PgSelectRows[15]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect14,PgSelectRows15,Access29 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 11, 6, 29

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket + class Bucket1,PgSelect14,PgSelectRows15,Access29,PgSelectInlineApply31 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 29, 14

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item16,PgSelectSingle17 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 11, 6, 29

ROOT PgSelectSingle{2}ᐸpeopleᐳ[17]
1:
ᐳ: 18, 28, 30
2: PgSelect[19]
3: PgSelectRows[23]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 29, 14, 16

ROOT PgSelectSingle{2}ᐸpeopleᐳ[17]
1:
ᐳ: 18, 28, 30, 32, 33, 34
2: PgSelectRows[23]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression18,PgSelect19,PgSelectRows23,PgClassExpression28,PgCursor30 bucket3 + class Bucket3,PgClassExpression18,PgSelectRows23,PgClassExpression28,PgCursor30,Access32,List33,Lambda34 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ23ᐳ[24]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item24,PgSelectSingle25,PgClassExpression26,PgClassExpression27 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.sql b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.sql index 7d38d39f53..7678691862 100644 --- a/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.sql +++ b/postgraphile/postgraphile/__tests__/queries/polymorphic/person-log-entries.sql @@ -1,19 +1,16 @@ select __people__."person_id"::text as "0", - __people__."username" as "1" + __people__."username" as "1", + array( + select array[ + __log_entries__."text", + __log_entries__."id"::text + ]::text[] + from "polymorphic"."log_entries" as __log_entries__ + where ( + __log_entries__."person_id" = __people__."person_id" + ) + order by __log_entries__."id" asc + )::text as "2" from "polymorphic"."people" as __people__ -order by __people__."person_id" asc; - -select __log_entries_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __log_entries_identifiers__, -lateral ( - select - __log_entries__."text" as "0", - __log_entries__."id"::text as "1", - __log_entries_identifiers__.idx as "2" - from "polymorphic"."log_entries" as __log_entries__ - where ( - __log_entries__."person_id" = __log_entries_identifiers__."id0" - ) - order by __log_entries__."id" asc -) as __log_entries_result__; \ No newline at end of file +order by __people__."person_id" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/arrays.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/arrays.mermaid index 4cfe4b6837..3ef401661a 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/arrays.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/arrays.mermaid @@ -11,7 +11,11 @@ graph TD %% plan dependencies PgSelect7[["PgSelect[7∈0] ➊
ᐸlistsᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Object10 --> PgSelect7 + PgFromExpression36{{"PgFromExpression[36∈0] ➊"}}:::plan + PgSelectInlineApply65["PgSelectInlineApply[65∈0] ➊"]:::plan + PgFromExpression50{{"PgFromExpression[50∈0] ➊"}}:::plan + PgSelectInlineApply69["PgSelectInlineApply[69∈0] ➊"]:::plan + Object10 & PgFromExpression36 & PgSelectInlineApply65 & PgFromExpression50 & PgSelectInlineApply69 --> PgSelect7 Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 @@ -21,15 +25,13 @@ graph TD PgSelectRows11[["PgSelectRows[11∈0] ➊"]]:::plan PgSelect7 --> PgSelectRows11 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - PgFromExpression36{{"PgFromExpression[36∈0] ➊"}}:::plan - PgFromExpression50{{"PgFromExpression[50∈0] ➊"}}:::plan - PgSelect32[["PgSelect[32∈1]
ᐸfrmcdc_compoundTypeᐳ"]]:::plan - PgClassExpression31{{"PgClassExpression[31∈1]
ᐸ__lists__....ype_array”ᐳ"}}:::plan - Object10 & PgClassExpression31 & PgFromExpression36 --> PgSelect32 - PgSelect48[["PgSelect[48∈1]
ᐸfrmcdc_compoundTypeᐳ"]]:::plan - PgClassExpression47{{"PgClassExpression[47∈1]
ᐸ__lists__...._array_nn”ᐳ"}}:::plan - Object10 & PgClassExpression47 & PgFromExpression50 --> PgSelect48 + List67{{"List[67∈1]
ᐸ12,66ᐳ"}}:::plan __Item12[/"__Item[12∈1]
ᐸ11ᐳ"\]:::itemplan + Access66{{"Access[66∈1] ➊
ᐸ7.m.subqueryDetailsFor32ᐳ"}}:::plan + __Item12 & Access66 --> List67 + List71{{"List[71∈1]
ᐸ12,70ᐳ"}}:::plan + Access70{{"Access[70∈1] ➊
ᐸ7.m.subqueryDetailsFor48ᐳ"}}:::plan + __Item12 & Access70 --> List71 PgSelectRows11 ==> __Item12 PgSelectSingle13{{"PgSelectSingle[13∈1]
ᐸlistsᐳ"}}:::plan __Item12 --> PgSelectSingle13 @@ -51,16 +53,20 @@ graph TD PgSelectSingle13 --> PgClassExpression27 PgClassExpression29{{"PgClassExpression[29∈1]
ᐸ__lists__...._array_nn”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression29 - PgSelectSingle13 --> PgClassExpression31 PgSelectRows37[["PgSelectRows[37∈1]"]]:::plan - PgSelect32 --> PgSelectRows37 - PgSelectSingle13 --> PgClassExpression47 + Lambda68{{"Lambda[68∈1]"}}:::plan + Lambda68 --> PgSelectRows37 PgSelectRows51[["PgSelectRows[51∈1]"]]:::plan - PgSelect48 --> PgSelectRows51 + Lambda72{{"Lambda[72∈1]"}}:::plan + Lambda72 --> PgSelectRows51 PgClassExpression61{{"PgClassExpression[61∈1]
ᐸ__lists__.”bytea_array”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression61 PgClassExpression63{{"PgClassExpression[63∈1]
ᐸ__lists__...._array_nn”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression63 + PgSelect7 --> Access66 + List67 --> Lambda68 + PgSelect7 --> Access70 + List71 --> Lambda72 __Item16[/"__Item[16∈2]
ᐸ15ᐳ"\]:::itemplan PgClassExpression15 ==> __Item16 __Item18[/"__Item[18∈3]
ᐸ17ᐳ"\]:::itemplan @@ -121,12 +127,12 @@ graph TD %% define steps subgraph "Buckets for queries/v4/arrays" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 8, 9, 36, 50, 10
2: PgSelect[7]
3: PgSelectRows[11]"):::bucket + Bucket0("Bucket 0 (root)

1: 65, 69
ᐳ: 6, 8, 9, 36, 50, 10
2: PgSelect[7]
3: PgSelectRows[11]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,PgFromExpression36,PgFromExpression50 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 10, 36, 50

ROOT __Item{1}ᐸ11ᐳ[12]
1:
ᐳ: 13, 14, 15, 17, 19, 21, 23, 25, 27, 29, 31, 47, 61, 63
2: PgSelect[32], PgSelect[48]
3: PgSelectRows[37], PgSelectRows[51]"):::bucket + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,PgFromExpression36,PgFromExpression50,PgSelectInlineApply65,PgSelectInlineApply69 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 7

ROOT __Item{1}ᐸ11ᐳ[12]
1:
ᐳ: 13, 66, 70, 14, 15, 17, 19, 21, 23, 25, 27, 29, 61, 63, 67, 68, 71, 72
2: PgSelectRows[37], PgSelectRows[51]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgClassExpression17,PgClassExpression19,PgClassExpression21,PgClassExpression23,PgClassExpression25,PgClassExpression27,PgClassExpression29,PgClassExpression31,PgSelect32,PgSelectRows37,PgClassExpression47,PgSelect48,PgSelectRows51,PgClassExpression61,PgClassExpression63 bucket1 + class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgClassExpression17,PgClassExpression19,PgClassExpression21,PgClassExpression23,PgClassExpression25,PgClassExpression27,PgClassExpression29,PgSelectRows37,PgSelectRows51,PgClassExpression61,PgClassExpression63,Access66,List67,Lambda68,Access70,List71,Lambda72 bucket1 Bucket2("Bucket 2 (listItem)

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item16 bucket2 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/arrays.sql b/postgraphile/postgraphile/__tests__/queries/v4/arrays.sql index e5ef379cce..7703325eec 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/arrays.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/arrays.sql @@ -20,31 +20,33 @@ select select to_char(__entry_4, 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) from unnest(__lists__."timestamptz_array_nn") __entry_4 )::text as "8", - (case when (__lists__."compound_type_array") is not distinct from null then null::text else array( - select case when (__compound_type__) is not distinct from null then null::text else json_build_array((((__compound_type__)."a"))::text, ((__compound_type__)."b"), (((__compound_type__)."c"))::text, ((__compound_type__)."d"), (((__compound_type__)."e"))::text, (((__compound_type__)."f"))::text, to_char(((__compound_type__)."g"), 'YYYY_MM_DD_HH24_MI_SS.US'::text), (((__compound_type__)."foo_bar"))::text)::text end - from unnest(__lists__."compound_type_array") __compound_type__ - )::text end) as "9", + __lists__."bytea_array"::text as "9", + __lists__."bytea_array_nn"::text as "10", array( - select case when (__compound_type_2) is not distinct from null then null::text else json_build_array((((__compound_type_2)."a"))::text, ((__compound_type_2)."b"), (((__compound_type_2)."c"))::text, ((__compound_type_2)."d"), (((__compound_type_2)."e"))::text, (((__compound_type_2)."f"))::text, to_char(((__compound_type_2)."g"), 'YYYY_MM_DD_HH24_MI_SS.US'::text), (((__compound_type_2)."foo_bar"))::text)::text end - from unnest(__lists__."compound_type_array_nn") __compound_type_2 - )::text as "10", - __lists__."bytea_array"::text as "11", - __lists__."bytea_array_nn"::text as "12" + select array[ + __frmcdc_compound_type__."a"::text, + __frmcdc_compound_type__."b", + __frmcdc_compound_type__."c"::text, + __frmcdc_compound_type__."d", + __frmcdc_compound_type__."e"::text, + __frmcdc_compound_type__."f"::text, + __frmcdc_compound_type__."foo_bar"::text, + (not (__frmcdc_compound_type__ is null))::text + ]::text[] + from unnest(__lists__."compound_type_array") as __frmcdc_compound_type__ + )::text as "11", + array( + select array[ + __frmcdc_compound_type_2."a"::text, + __frmcdc_compound_type_2."b", + __frmcdc_compound_type_2."c"::text, + __frmcdc_compound_type_2."d", + __frmcdc_compound_type_2."e"::text, + __frmcdc_compound_type_2."f"::text, + __frmcdc_compound_type_2."foo_bar"::text, + (not (__frmcdc_compound_type_2 is null))::text + ]::text[] + from unnest(__lists__."compound_type_array_nn") as __frmcdc_compound_type_2 + )::text as "12" from "b"."lists" as __lists__ -order by __lists__."id" asc; - -select __frmcdc_compound_type_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"c"."compound_type"[] as "id0" from json_array_elements($1::json) with ordinality as ids) as __frmcdc_compound_type_identifiers__, -lateral ( - select - __frmcdc_compound_type__."a"::text as "0", - __frmcdc_compound_type__."b" as "1", - __frmcdc_compound_type__."c"::text as "2", - __frmcdc_compound_type__."d" as "3", - __frmcdc_compound_type__."e"::text as "4", - __frmcdc_compound_type__."f"::text as "5", - __frmcdc_compound_type__."foo_bar"::text as "6", - (not (__frmcdc_compound_type__ is null))::text as "7", - __frmcdc_compound_type_identifiers__.idx as "8" - from unnest(__frmcdc_compound_type_identifiers__."id0") as __frmcdc_compound_type__ -) as __frmcdc_compound_type_result__; \ No newline at end of file +order by __lists__."id" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.mermaid index eeff9025d1..396325569a 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.mermaid @@ -26,19 +26,20 @@ graph TD Constant69{{"Constant[69∈0] ➊
ᐸfalseᐳ"}}:::plan PgSelect14[["PgSelect[14∈1] ➊
ᐸpostsᐳ"]]:::plan PgSelectInlineApply67["PgSelectInlineApply[67∈1] ➊"]:::plan - Object11 & Connection12 & PgFromExpression25 & PgSelectInlineApply67 --> PgSelect14 + PgSelectInlineApply73["PgSelectInlineApply[73∈1] ➊"]:::plan + Object11 & Connection12 & PgFromExpression25 & PgSelectInlineApply67 & PgFromExpression47 & PgSelectInlineApply73 --> PgSelect14 PgSelectRows15[["PgSelectRows[15∈1] ➊"]]:::plan PgSelect14 --> PgSelectRows15 __Item16[/"__Item[16∈2]
ᐸ15ᐳ"\]:::itemplan PgSelectRows15 ==> __Item16 PgSelectSingle17{{"PgSelectSingle[17∈2]
ᐸpostsᐳ"}}:::plan __Item16 --> PgSelectSingle17 - PgSelect45[["PgSelect[45∈3]
ᐸfrmcdc_userUpdateContentᐳ"]]:::plan - PgClassExpression44{{"PgClassExpression[44∈3]
ᐸ__posts__....d_content”ᐳ"}}:::plan - Object11 & PgClassExpression44 & PgFromExpression47 --> PgSelect45 Object72{{"Object[72∈3]
ᐸ{m,hasMore,items}ᐳ"}}:::plan List71{{"List[71∈3]
ᐸ70ᐳ"}}:::plan Constant68 & Constant69 & List71 --> Object72 + List75{{"List[75∈3]
ᐸ16,74ᐳ"}}:::plan + Access74{{"Access[74∈3] ➊
ᐸ14.m.subqueryDetailsFor45ᐳ"}}:::plan + __Item16 & Access74 --> List75 PgClassExpression18{{"PgClassExpression[18∈3]
ᐸ__posts__.”id”ᐳ"}}:::plan PgSelectSingle17 --> PgClassExpression18 PgClassExpression19{{"PgClassExpression[19∈3]
ᐸ__posts__.”user_id”ᐳ"}}:::plan @@ -53,14 +54,16 @@ graph TD PgSelectSingle28 --> PgClassExpression29 PgClassExpression30{{"PgClassExpression[30∈3]
ᐸ__frmcdc_u...__.”lines”ᐳ"}}:::plan PgSelectSingle28 --> PgClassExpression30 - PgSelectSingle17 --> PgClassExpression44 PgSelectRows48[["PgSelectRows[48∈3]"]]:::plan - PgSelect45 --> PgSelectRows48 + Lambda76{{"Lambda[76∈3]"}}:::plan + Lambda76 --> PgSelectRows48 PgClassExpression66{{"PgClassExpression[66∈3]
ᐸ__posts__.”created_at”ᐳ"}}:::plan PgSelectSingle17 --> PgClassExpression66 RemapKeys70{{"RemapKeys[70∈3]
ᐸ17:{”0”:2,”1”:3,”2”:4}ᐳ"}}:::plan PgSelectSingle17 --> RemapKeys70 RemapKeys70 --> List71 + PgSelect14 --> Access74 + List75 --> Lambda76 PgSelect34[["PgSelect[34∈5]
ᐸfrmcdc_userUpdateContentLineNodeᐳ"]]:::plan __Item33[/"__Item[33∈5]
ᐸ30ᐳ"\]:::itemplan Object11 & __Item33 & PgFromExpression38 --> PgSelect34 @@ -104,15 +107,15 @@ graph TD Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12,PgFromExpression25,PgFromExpression38,PgFromExpression47,PgFromExpression60,Constant68,Constant69 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6, 25, 47, 68, 69, 38, 60

ROOT Connectionᐸ8ᐳ[12]
1: PgSelectInlineApply[67]
2: PgSelect[14]
3: PgSelectRows[15]"):::bucket + Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6, 25, 47, 68, 69, 38, 60

ROOT Connectionᐸ8ᐳ[12]
1: 67, 73
2: PgSelect[14]
3: PgSelectRows[15]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect14,PgSelectRows15,PgSelectInlineApply67 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 11, 47, 68, 69, 38, 60

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket + class Bucket1,PgSelect14,PgSelectRows15,PgSelectInlineApply67,PgSelectInlineApply73 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 68, 69, 14, 11, 38, 60

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item16,PgSelectSingle17 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 11, 47, 68, 69, 38, 60

ROOT PgSelectSingle{2}ᐸpostsᐳ[17]
1:
ᐳ: 18, 19, 44, 66, 70, 71, 72
2: PgSelectRows[27], PgSelect[45]
ᐳ: 26, 28, 29, 30
3: PgSelectRows[48]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 68, 69, 14, 16, 11, 38, 60

ROOT PgSelectSingle{2}ᐸpostsᐳ[17]
1:
ᐳ: 18, 19, 66, 70, 74, 71, 72, 75, 76
2: PgSelectRows[27], PgSelectRows[48]
ᐳ: 26, 28, 29, 30"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression18,PgClassExpression19,First26,PgSelectRows27,PgSelectSingle28,PgClassExpression29,PgClassExpression30,PgClassExpression44,PgSelect45,PgSelectRows48,PgClassExpression66,RemapKeys70,List71,Object72 bucket3 + class Bucket3,PgClassExpression18,PgClassExpression19,First26,PgSelectRows27,PgSelectSingle28,PgClassExpression29,PgClassExpression30,PgSelectRows48,PgClassExpression66,RemapKeys70,List71,Object72,Access74,List75,Lambda76 bucket3 Bucket5("Bucket 5 (listItem)
Deps: 11, 38

ROOT __Item{5}ᐸ30ᐳ[33]
1: PgSelect[34]
2: PgSelectRows[39]"):::bucket classDef bucket5 stroke:#7fff00 class Bucket5,__Item33,PgSelect34,PgSelectRows39 bucket5 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.sql b/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.sql index eceb704d69..79b2c3edba 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/composite_domains.sql @@ -10,34 +10,26 @@ select from unnest(__frmcdc_user_update_content__."lines") __user_update_content_line_node_array_item__ )::text end) as "3", (not (__frmcdc_user_update_content__ is null))::text as "4", - (case when (__posts__."thread_content") is not distinct from null then null::text else array( - select case when (__base_user_update_content__) is not distinct from null then null::text else json_build_array((case when (((__base_user_update_content__)."lines")) is not distinct from null then null::text else array( - select array( - select case when (__base_user_update_content_line_node_2) is not distinct from null then null::text else json_build_array((((__base_user_update_content_line_node_2)."line_node_type"))::text, ((__base_user_update_content_line_node_2)."line_node_text"))::text end - from unnest(__user_update_content_line_node_array_item_2) __base_user_update_content_line_node_2 - )::text - from unnest(((__base_user_update_content__)."lines")) __user_update_content_line_node_array_item_2 - )::text end), ((__base_user_update_content__)."img_url"))::text end - from unnest(__posts__."thread_content") __base_user_update_content__ - )::text end) as "5", - to_char(__posts__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "6" + to_char(__posts__."created_at", 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text) as "5", + array( + select array[ + __frmcdc_user_update_content_2."img_url", + (case when (__frmcdc_user_update_content_2."lines") is not distinct from null then null::text else array( + select array( + select case when (__base_user_update_content_line_node_2) is not distinct from null then null::text else json_build_array((((__base_user_update_content_line_node_2)."line_node_type"))::text, ((__base_user_update_content_line_node_2)."line_node_text"))::text end + from unnest(__user_update_content_line_node_array_item_2) __base_user_update_content_line_node_2 + )::text + from unnest(__frmcdc_user_update_content_2."lines") __user_update_content_line_node_array_item_2 + )::text end), + (not (__frmcdc_user_update_content_2 is null))::text + ]::text[] + from unnest(__posts__."thread_content") as __frmcdc_user_update_content_2 + )::text as "6" from "composite_domains"."posts" as __posts__ left outer join lateral (select (__posts__."content").*) as __frmcdc_user_update_content__ on TRUE order by __posts__."id" asc; -select - __frmcdc_user_update_content__."img_url" as "0", - (case when (__frmcdc_user_update_content__."lines") is not distinct from null then null::text else array( - select array( - select case when (__base_user_update_content_line_node__) is not distinct from null then null::text else json_build_array((((__base_user_update_content_line_node__)."line_node_type"))::text, ((__base_user_update_content_line_node__)."line_node_text"))::text end - from unnest(__user_update_content_line_node_array_item__) __base_user_update_content_line_node__ - )::text - from unnest(__frmcdc_user_update_content__."lines") __user_update_content_line_node_array_item__ - )::text end) as "1", - (not (__frmcdc_user_update_content__ is null))::text as "2" -from unnest($1::"composite_domains"."user_update_content"[]) as __frmcdc_user_update_content__; - select __frmcdc_user_update_content_line_node_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"composite_domains"."user_update_content_line_node"[] as "id0" from json_array_elements($1::json) with ordinality as ids) as __frmcdc_user_update_content_line_node_identifiers__, lateral ( diff --git a/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.mermaid index 041c8bd5a6..b4fa2c2527 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.mermaid @@ -19,19 +19,19 @@ graph TD Connection255{{"Connection[255∈0] ➊
ᐸ252ᐳ"}}:::plan PgSelect267[["PgSelect[267∈0] ➊
ᐸpersonᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Constant573{{"Constant[573∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant581{{"Constant[581∈0] ➊
ᐸ1ᐳ"}}:::plan PgFromExpression358{{"PgFromExpression[358∈0] ➊"}}:::plan - Object11 & Constant573 & PgFromExpression358 --> PgSelect267 + Object11 & Constant581 & PgFromExpression358 --> PgSelect267 Connection318{{"Connection[318∈0] ➊
ᐸ314ᐳ"}}:::plan PgFromExpression386{{"PgFromExpression[386∈0] ➊"}}:::plan - Constant576{{"Constant[576∈0] ➊
ᐸ42ᐳ"}}:::plan - Constant577{{"Constant[577∈0] ➊
ᐸ'Hi'ᐳ"}}:::plan - Constant576 & Constant573 & Constant577 --> PgFromExpression386 + Constant584{{"Constant[584∈0] ➊
ᐸ42ᐳ"}}:::plan + Constant585{{"Constant[585∈0] ➊
ᐸ'Hi'ᐳ"}}:::plan + Constant584 & Constant581 & Constant585 --> PgFromExpression386 PgFromExpression459{{"PgFromExpression[459∈0] ➊"}}:::plan - Constant578{{"Constant[578∈0] ➊
ᐸ999999999ᐳ"}}:::plan - Constant579{{"Constant[579∈0] ➊
ᐸ”Don't fail me now...”ᐳ"}}:::plan - Constant579 --> PgFromExpression459 - Constant578 -- 2 --> PgFromExpression459 + Constant586{{"Constant[586∈0] ➊
ᐸ999999999ᐳ"}}:::plan + Constant587{{"Constant[587∈0] ➊
ᐸ”Don't fail me now...”ᐳ"}}:::plan + Constant587 --> PgFromExpression459 + Constant586 -- 2 --> PgFromExpression459 PgSelect527[["PgSelect[527∈0] ➊
ᐸsearch_test_summariesᐳ"]]:::plan Object11 --> PgSelect527 PgSelect8[["PgSelect[8∈0] ➊
ᐸfunc_in_inoutᐳ"]]:::plan @@ -40,25 +40,25 @@ graph TD Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 - Constant571{{"Constant[571∈0] ➊
ᐸ10ᐳ"}}:::plan - Constant572{{"Constant[572∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant571 & Constant572 --> PgFromExpression12 + Constant579{{"Constant[579∈0] ➊
ᐸ10ᐳ"}}:::plan + Constant580{{"Constant[580∈0] ➊
ᐸ5ᐳ"}}:::plan + Constant579 & Constant580 --> PgFromExpression12 PgSelect18[["PgSelect[18∈0] ➊
ᐸfunc_in_outᐳ"]]:::plan PgFromExpression20{{"PgFromExpression[20∈0] ➊"}}:::plan Object11 & PgFromExpression20 --> PgSelect18 PgSelect33[["PgSelect[33∈0] ➊
ᐸfunc_out_complexᐳ"]]:::plan PgFromExpression35{{"PgFromExpression[35∈0] ➊"}}:::plan Object11 & PgFromExpression35 --> PgSelect33 - Constant574{{"Constant[574∈0] ➊
ᐸ'test'ᐳ"}}:::plan - Constant573 & Constant574 --> PgFromExpression35 + Constant582{{"Constant[582∈0] ➊
ᐸ'test'ᐳ"}}:::plan + Constant581 & Constant582 --> PgFromExpression35 PgFromExpression84{{"PgFromExpression[84∈0] ➊"}}:::plan - Constant573 & Constant574 --> PgFromExpression84 + Constant581 & Constant582 --> PgFromExpression84 PgSelect143[["PgSelect[143∈0] ➊
ᐸfunc_out_out_compound_typeᐳ"]]:::plan PgFromExpression145{{"PgFromExpression[145∈0] ➊"}}:::plan Object11 & PgFromExpression145 --> PgSelect143 PgFromExpression238{{"PgFromExpression[238∈0] ➊"}}:::plan - Constant575{{"Constant[575∈0] ➊
ᐸ20ᐳ"}}:::plan - Constant575 --> PgFromExpression238 + Constant583{{"Constant[583∈0] ➊
ᐸ20ᐳ"}}:::plan + Constant583 --> PgFromExpression238 PgSelect384[["PgSelect[384∈0] ➊
ᐸquery_output_two_rowsᐳ"]]:::plan Object11 & PgFromExpression386 --> PgSelect384 PgSelect457[["PgSelect[457∈0] ➊
ᐸquery_output_two_rowsᐳ"]]:::plan @@ -74,7 +74,7 @@ graph TD First13 --> PgSelectSingle15 PgClassExpression16{{"PgClassExpression[16∈0] ➊
ᐸ__func_in_inout__.vᐳ"}}:::plan PgSelectSingle15 --> PgClassExpression16 - Constant571 --> PgFromExpression20 + Constant579 --> PgFromExpression20 First21{{"First[21∈0] ➊"}}:::plan PgSelectRows22[["PgSelectRows[22∈0] ➊"]]:::plan PgSelectRows22 --> First21 @@ -107,7 +107,7 @@ graph TD PgSelect135 --> PgSelectRows138 PgSelectSingle139{{"PgSelectSingle[139∈0] ➊
ᐸfunc_out_outᐳ"}}:::plan First137 --> PgSelectSingle139 - Constant571 --> PgFromExpression145 + Constant579 --> PgFromExpression145 First146{{"First[146∈0] ➊"}}:::plan PgSelectRows147[["PgSelectRows[147∈0] ➊"]]:::plan PgSelectRows147 --> First146 @@ -149,14 +149,14 @@ graph TD PgSelectSingle231{{"PgSelectSingle[231∈0] ➊
ᐸfunc_out_unnamed_out_out_unnamedᐳ"}}:::plan First229 --> PgSelectSingle231 PgFromExpression254{{"PgFromExpression[254∈0] ➊"}}:::plan - Constant575 --> PgFromExpression254 + Constant583 --> PgFromExpression254 First269{{"First[269∈0] ➊"}}:::plan PgSelectRows270[["PgSelectRows[270∈0] ➊"]]:::plan PgSelectRows270 --> First269 PgSelect267 --> PgSelectRows270 PgSelectSingle271{{"PgSelectSingle[271∈0] ➊
ᐸpersonᐳ"}}:::plan First269 --> PgSelectSingle271 - Constant574 --> PgFromExpression358 + Constant582 --> PgFromExpression358 First387{{"First[387∈0] ➊"}}:::plan PgSelectRows388[["PgSelectRows[388∈0] ➊"]]:::plan PgSelectRows388 --> First387 @@ -176,19 +176,20 @@ graph TD Constant76{{"Constant[76∈0] ➊
ᐸ'posts'ᐳ"}}:::plan PgFromExpression96{{"PgFromExpression[96∈0] ➊"}}:::plan PgFromExpression106{{"PgFromExpression[106∈0] ➊"}}:::plan - Constant537{{"Constant[537∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant538{{"Constant[538∈0] ➊
ᐸfalseᐳ"}}:::plan - Constant543{{"Constant[543∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant548{{"Constant[548∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant554{{"Constant[554∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant560{{"Constant[560∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant566{{"Constant[566∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant541{{"Constant[541∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant542{{"Constant[542∈0] ➊
ᐸfalseᐳ"}}:::plan + Constant547{{"Constant[547∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant556{{"Constant[556∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant562{{"Constant[562∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant568{{"Constant[568∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant574{{"Constant[574∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + PgSelect53[["PgSelect[53∈1] ➊
ᐸpersonᐳ"]]:::plan + PgFromExpression55{{"PgFromExpression[55∈1] ➊"}}:::plan + PgSelectInlineApply536["PgSelectInlineApply[536∈1] ➊"]:::plan + Object11 & PgFromExpression55 & PgSelectInlineApply536 --> PgSelect53 PgSelect41[["PgSelect[41∈1] ➊
ᐸfrmcdc_compoundTypeᐳ"]]:::plan PgFromExpression45{{"PgFromExpression[45∈1] ➊"}}:::plan Object11 & PgFromExpression45 --> PgSelect41 - PgSelect53[["PgSelect[53∈1] ➊
ᐸpersonᐳ"]]:::plan - PgFromExpression55{{"PgFromExpression[55∈1] ➊"}}:::plan - Object11 & PgFromExpression55 --> PgSelect53 PgClassExpression39{{"PgClassExpression[39∈1] ➊
ᐸ__func_out...plex__.”x”ᐳ"}}:::plan PgSelectSingle38 --> PgClassExpression39 PgClassExpression40{{"PgClassExpression[40∈1] ➊
ᐸ__func_out...plex__.”y”ᐳ"}}:::plan @@ -215,18 +216,22 @@ graph TD PgSelectSingle48 --> PgClassExpression50 PgClassExpression51{{"PgClassExpression[51∈2] ➊
ᐸ__frmcdc_c...type__.”c”ᐳ"}}:::plan PgSelectSingle48 --> PgClassExpression51 - PgSelect72[["PgSelect[72∈3] ➊
ᐸpostᐳ"]]:::plan - PgClassExpression60{{"PgClassExpression[60∈3] ➊
ᐸ__person__.”id”ᐳ"}}:::plan - Object11 & PgClassExpression60 & Connection70 --> PgSelect72 List61{{"List[61∈3] ➊
ᐸ59,60ᐳ"}}:::plan + PgClassExpression60{{"PgClassExpression[60∈3] ➊
ᐸ__person__.”id”ᐳ"}}:::plan Constant59 & PgClassExpression60 --> List61 + List538{{"List[538∈3] ➊
ᐸ56,537ᐳ"}}:::plan + Access537{{"Access[537∈3] ➊
ᐸ53.m.subqueryDetailsFor72ᐳ"}}:::plan + First56 & Access537 --> List538 PgSelectSingle58 --> PgClassExpression60 Lambda62{{"Lambda[62∈3] ➊
ᐸbase64JSONEncodeᐳ"}}:::plan List61 --> Lambda62 PgClassExpression63{{"PgClassExpression[63∈3] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle58 --> PgClassExpression63 PgSelectRows73[["PgSelectRows[73∈3] ➊"]]:::plan - PgSelect72 --> PgSelectRows73 + Lambda539{{"Lambda[539∈3] ➊"}}:::plan + Lambda539 --> PgSelectRows73 + PgSelect53 --> Access537 + List538 --> Lambda539 __Item74[/"__Item[74∈4]
ᐸ73ᐳ"\]:::itemplan PgSelectRows73 ==> __Item74 PgSelectSingle75{{"PgSelectSingle[75∈4]
ᐸpostᐳ"}}:::plan @@ -238,9 +243,9 @@ graph TD Lambda79{{"Lambda[79∈5]
ᐸbase64JSONEncodeᐳ"}}:::plan List78 --> Lambda79 PgSelect86[["PgSelect[86∈6] ➊
ᐸfunc_out_complex_setofᐳ"]]:::plan - PgSelectInlineApply536["PgSelectInlineApply[536∈6] ➊"]:::plan - PgSelectInlineApply542["PgSelectInlineApply[542∈6] ➊"]:::plan - Object11 & PgFromExpression84 & Connection85 & PgFromExpression96 & PgSelectInlineApply536 & PgFromExpression106 & PgSelectInlineApply542 --> PgSelect86 + PgSelectInlineApply540["PgSelectInlineApply[540∈6] ➊"]:::plan + PgSelectInlineApply546["PgSelectInlineApply[546∈6] ➊"]:::plan + Object11 & PgFromExpression84 & Connection85 & PgFromExpression96 & PgSelectInlineApply540 & PgFromExpression106 & PgSelectInlineApply546 --> PgSelect86 PgSelect130[["PgSelect[130∈6] ➊
ᐸfunc_out_complex_setof(aggregate)ᐳ"]]:::plan Object11 & PgFromExpression84 & Connection85 --> PgSelect130 PgSelectRows87[["PgSelectRows[87∈6] ➊"]]:::plan @@ -257,32 +262,32 @@ graph TD PgSelectRows87 ==> __Item88 PgSelectSingle89{{"PgSelectSingle[89∈7]
ᐸfunc_out_complex_setofᐳ"}}:::plan __Item88 --> PgSelectSingle89 - Object541{{"Object[541∈8]
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List540{{"List[540∈8]
ᐸ539ᐳ"}}:::plan - Constant537 & Constant538 & List540 --> Object541 - Object546{{"Object[546∈8]
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List545{{"List[545∈8]
ᐸ544ᐳ"}}:::plan - Constant543 & Constant538 & List545 --> Object546 + Object545{{"Object[545∈8]
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List544{{"List[544∈8]
ᐸ543ᐳ"}}:::plan + Constant541 & Constant542 & List544 --> Object545 + Object550{{"Object[550∈8]
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List549{{"List[549∈8]
ᐸ548ᐳ"}}:::plan + Constant547 & Constant542 & List549 --> Object550 PgClassExpression90{{"PgClassExpression[90∈8]
ᐸ__func_out...etof__.”x”ᐳ"}}:::plan PgSelectSingle89 --> PgClassExpression90 First97{{"First[97∈8]"}}:::plan PgSelectRows98[["PgSelectRows[98∈8]"]]:::plan PgSelectRows98 --> First97 - Object541 --> PgSelectRows98 + Object545 --> PgSelectRows98 PgSelectSingle99{{"PgSelectSingle[99∈8]
ᐸfrmcdc_compoundTypeᐳ"}}:::plan First97 --> PgSelectSingle99 First107{{"First[107∈8]"}}:::plan PgSelectRows108[["PgSelectRows[108∈8]"]]:::plan PgSelectRows108 --> First107 - Object546 --> PgSelectRows108 + Object550 --> PgSelectRows108 PgSelectSingle109{{"PgSelectSingle[109∈8]
ᐸpersonᐳ"}}:::plan First107 --> PgSelectSingle109 - RemapKeys539{{"RemapKeys[539∈8]
ᐸ89:{”0”:1,”1”:2,”2”:3,”3”:4}ᐳ"}}:::plan - PgSelectSingle89 --> RemapKeys539 - RemapKeys539 --> List540 - RemapKeys544{{"RemapKeys[544∈8]
ᐸ89:{”0”:5,”1”:6}ᐳ"}}:::plan - PgSelectSingle89 --> RemapKeys544 - RemapKeys544 --> List545 + RemapKeys543{{"RemapKeys[543∈8]
ᐸ89:{”0”:1,”1”:2,”2”:3,”3”:4}ᐳ"}}:::plan + PgSelectSingle89 --> RemapKeys543 + RemapKeys543 --> List544 + RemapKeys548{{"RemapKeys[548∈8]
ᐸ89:{”0”:5,”1”:6}ᐳ"}}:::plan + PgSelectSingle89 --> RemapKeys548 + RemapKeys548 --> List549 PgClassExpression100{{"PgClassExpression[100∈9]
ᐸ__frmcdc_c...type__.”a”ᐳ"}}:::plan PgSelectSingle99 --> PgClassExpression100 PgClassExpression101{{"PgClassExpression[101∈9]
ᐸ__frmcdc_c...type__.”b”ᐳ"}}:::plan @@ -461,7 +466,7 @@ graph TD PgSelectSingle259 --> PgClassExpression260 PgFromExpression284{{"PgFromExpression[284∈32] ➊"}}:::plan PgClassExpression279{{"PgClassExpression[279∈32] ➊
ᐸ__person__ᐳ"}}:::plan - PgClassExpression279 & Constant573 & Constant574 --> PgFromExpression284 + PgClassExpression279 & Constant581 & Constant582 --> PgFromExpression284 List274{{"List[274∈32] ➊
ᐸ59,273ᐳ"}}:::plan PgClassExpression273{{"PgClassExpression[273∈32] ➊
ᐸ__person__.”id”ᐳ"}}:::plan Constant59 & PgClassExpression273 --> List274 @@ -476,7 +481,7 @@ graph TD PgSelect362[["PgSelect[362∈32] ➊
ᐸperson_computed_inout_outᐳ"]]:::plan PgFromExpression364{{"PgFromExpression[364∈32] ➊"}}:::plan Object11 & PgFromExpression364 --> PgSelect362 - PgClassExpression279 & Constant574 --> PgFromExpression364 + PgClassExpression279 & Constant582 --> PgFromExpression364 PgSelect373[["PgSelect[373∈32] ➊
ᐸperson_computed_out_outᐳ"]]:::plan PgFromExpression375{{"PgFromExpression[375∈32] ➊"}}:::plan Object11 & PgFromExpression375 --> PgSelect373 @@ -523,12 +528,13 @@ graph TD PgSelect373 --> PgSelectRows377 PgSelectSingle378{{"PgSelectSingle[378∈32] ➊
ᐸperson_computed_out_outᐳ"}}:::plan First376 --> PgSelectSingle378 + PgSelect302[["PgSelect[302∈33] ➊
ᐸpersonᐳ"]]:::plan + PgFromExpression304{{"PgFromExpression[304∈33] ➊"}}:::plan + PgSelectInlineApply551["PgSelectInlineApply[551∈33] ➊"]:::plan + Object11 & PgFromExpression304 & PgSelectInlineApply551 --> PgSelect302 PgSelect290[["PgSelect[290∈33] ➊
ᐸfrmcdc_compoundTypeᐳ"]]:::plan PgFromExpression294{{"PgFromExpression[294∈33] ➊"}}:::plan Object11 & PgFromExpression294 --> PgSelect290 - PgSelect302[["PgSelect[302∈33] ➊
ᐸpersonᐳ"]]:::plan - PgFromExpression304{{"PgFromExpression[304∈33] ➊"}}:::plan - Object11 & PgFromExpression304 --> PgSelect302 PgClassExpression288{{"PgClassExpression[288∈33] ➊
ᐸ__person_c...plex__.”x”ᐳ"}}:::plan PgSelectSingle287 --> PgClassExpression288 PgClassExpression289{{"PgClassExpression[289∈33] ➊
ᐸ__person_c...plex__.”y”ᐳ"}}:::plan @@ -555,18 +561,22 @@ graph TD PgSelectSingle297 --> PgClassExpression299 PgClassExpression300{{"PgClassExpression[300∈34] ➊
ᐸ__frmcdc_c...type__.”c”ᐳ"}}:::plan PgSelectSingle297 --> PgClassExpression300 - PgSelect320[["PgSelect[320∈35] ➊
ᐸpostᐳ"]]:::plan - PgClassExpression309{{"PgClassExpression[309∈35] ➊
ᐸ__person__.”id”ᐳ"}}:::plan - Object11 & PgClassExpression309 & Connection318 --> PgSelect320 List310{{"List[310∈35] ➊
ᐸ59,309ᐳ"}}:::plan + PgClassExpression309{{"PgClassExpression[309∈35] ➊
ᐸ__person__.”id”ᐳ"}}:::plan Constant59 & PgClassExpression309 --> List310 + List553{{"List[553∈35] ➊
ᐸ305,552ᐳ"}}:::plan + Access552{{"Access[552∈35] ➊
ᐸ302.m.subqueryDetailsFor320ᐳ"}}:::plan + First305 & Access552 --> List553 PgSelectSingle307 --> PgClassExpression309 Lambda311{{"Lambda[311∈35] ➊
ᐸbase64JSONEncodeᐳ"}}:::plan List310 --> Lambda311 PgClassExpression312{{"PgClassExpression[312∈35] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle307 --> PgClassExpression312 PgSelectRows321[["PgSelectRows[321∈35] ➊"]]:::plan - PgSelect320 --> PgSelectRows321 + Lambda554{{"Lambda[554∈35] ➊"}}:::plan + Lambda554 --> PgSelectRows321 + PgSelect302 --> Access552 + List553 --> Lambda554 __Item322[/"__Item[322∈36]
ᐸ321ᐳ"\]:::itemplan PgSelectRows321 ==> __Item322 PgSelectSingle323{{"PgSelectSingle[323∈36]
ᐸpostᐳ"}}:::plan @@ -635,8 +645,8 @@ graph TD PgSelectSingle389 --> PgClassExpression453 PgSelect403[["PgSelect[403∈44] ➊
ᐸpersonᐳ"]]:::plan PgClassExpression402{{"PgClassExpression[402∈44] ➊
ᐸ__left_arm...person_id”ᐳ"}}:::plan - PgSelectInlineApply547["PgSelectInlineApply[547∈44] ➊"]:::plan - Object11 & PgClassExpression402 & PgSelectInlineApply547 --> PgSelect403 + PgSelectInlineApply555["PgSelectInlineApply[555∈44] ➊"]:::plan + Object11 & PgClassExpression402 & PgSelectInlineApply555 --> PgSelect403 PgClassExpression399{{"PgClassExpression[399∈44] ➊
ᐸ__left_arm__.”id”ᐳ"}}:::plan PgSelectSingle398 --> PgClassExpression399 PgClassExpression400{{"PgClassExpression[400∈44] ➊
ᐸ__left_arm...in_metres”ᐳ"}}:::plan @@ -650,26 +660,26 @@ graph TD PgSelect403 --> PgSelectRows408 PgSelectSingle409{{"PgSelectSingle[409∈44] ➊
ᐸpersonᐳ"}}:::plan First407 --> PgSelectSingle409 - Object552{{"Object[552∈45] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List551{{"List[551∈45] ➊
ᐸ550ᐳ"}}:::plan - Constant548 & Constant538 & List551 --> Object552 + Object560{{"Object[560∈45] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List559{{"List[559∈45] ➊
ᐸ558ᐳ"}}:::plan + Constant556 & Constant542 & List559 --> Object560 PgClassExpression410{{"PgClassExpression[410∈45] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle409 --> PgClassExpression410 First416{{"First[416∈45] ➊"}}:::plan PgSelectRows417[["PgSelectRows[417∈45] ➊"]]:::plan PgSelectRows417 --> First416 - Object552 --> PgSelectRows417 + Object560 --> PgSelectRows417 PgSelectSingle418{{"PgSelectSingle[418∈45] ➊
ᐸperson_secretᐳ"}}:::plan First416 --> PgSelectSingle418 - RemapKeys550{{"RemapKeys[550∈45] ➊
ᐸ409:{”0”:1,”1”:2}ᐳ"}}:::plan - PgSelectSingle409 --> RemapKeys550 - RemapKeys550 --> List551 + RemapKeys558{{"RemapKeys[558∈45] ➊
ᐸ409:{”0”:1,”1”:2}ᐳ"}}:::plan + PgSelectSingle409 --> RemapKeys558 + RemapKeys558 --> List559 PgClassExpression419{{"PgClassExpression[419∈46] ➊
ᐸ__person_s..._.”sekrit”ᐳ"}}:::plan PgSelectSingle418 --> PgClassExpression419 PgSelect436[["PgSelect[436∈47] ➊
ᐸpersonᐳ"]]:::plan PgClassExpression435{{"PgClassExpression[435∈47] ➊
ᐸ__post__.”author_id”ᐳ"}}:::plan - PgSelectInlineApply553["PgSelectInlineApply[553∈47] ➊"]:::plan - Object11 & PgClassExpression435 & PgSelectInlineApply553 --> PgSelect436 + PgSelectInlineApply561["PgSelectInlineApply[561∈47] ➊"]:::plan + Object11 & PgClassExpression435 & PgSelectInlineApply561 --> PgSelect436 PgClassExpression433{{"PgClassExpression[433∈47] ➊
ᐸ__post__.”id”ᐳ"}}:::plan PgSelectSingle432 --> PgClassExpression433 PgClassExpression434{{"PgClassExpression[434∈47] ➊
ᐸ__post__.”headline”ᐳ"}}:::plan @@ -681,20 +691,20 @@ graph TD PgSelect436 --> PgSelectRows441 PgSelectSingle442{{"PgSelectSingle[442∈47] ➊
ᐸpersonᐳ"}}:::plan First440 --> PgSelectSingle442 - Object558{{"Object[558∈48] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List557{{"List[557∈48] ➊
ᐸ556ᐳ"}}:::plan - Constant554 & Constant538 & List557 --> Object558 + Object566{{"Object[566∈48] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List565{{"List[565∈48] ➊
ᐸ564ᐳ"}}:::plan + Constant562 & Constant542 & List565 --> Object566 PgClassExpression443{{"PgClassExpression[443∈48] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle442 --> PgClassExpression443 First449{{"First[449∈48] ➊"}}:::plan PgSelectRows450[["PgSelectRows[450∈48] ➊"]]:::plan PgSelectRows450 --> First449 - Object558 --> PgSelectRows450 + Object566 --> PgSelectRows450 PgSelectSingle451{{"PgSelectSingle[451∈48] ➊
ᐸperson_secretᐳ"}}:::plan First449 --> PgSelectSingle451 - RemapKeys556{{"RemapKeys[556∈48] ➊
ᐸ442:{”0”:1,”1”:2}ᐳ"}}:::plan - PgSelectSingle442 --> RemapKeys556 - RemapKeys556 --> List557 + RemapKeys564{{"RemapKeys[564∈48] ➊
ᐸ442:{”0”:1,”1”:2}ᐳ"}}:::plan + PgSelectSingle442 --> RemapKeys564 + RemapKeys564 --> List565 PgClassExpression452{{"PgClassExpression[452∈49] ➊
ᐸ__person_s..._.”sekrit”ᐳ"}}:::plan PgSelectSingle451 --> PgClassExpression452 PgSelect464[["PgSelect[464∈50] ➊
ᐸleft_armᐳ"]]:::plan @@ -725,8 +735,8 @@ graph TD PgSelectSingle462 --> PgClassExpression526 PgSelect476[["PgSelect[476∈51] ➊
ᐸpersonᐳ"]]:::plan PgClassExpression475{{"PgClassExpression[475∈51] ➊
ᐸ__left_arm...person_id”ᐳ"}}:::plan - PgSelectInlineApply559["PgSelectInlineApply[559∈51] ➊"]:::plan - Object11 & PgClassExpression475 & PgSelectInlineApply559 --> PgSelect476 + PgSelectInlineApply567["PgSelectInlineApply[567∈51] ➊"]:::plan + Object11 & PgClassExpression475 & PgSelectInlineApply567 --> PgSelect476 PgClassExpression472{{"PgClassExpression[472∈51] ➊
ᐸ__left_arm__.”id”ᐳ"}}:::plan PgSelectSingle471 --> PgClassExpression472 PgClassExpression473{{"PgClassExpression[473∈51] ➊
ᐸ__left_arm...in_metres”ᐳ"}}:::plan @@ -740,26 +750,26 @@ graph TD PgSelect476 --> PgSelectRows481 PgSelectSingle482{{"PgSelectSingle[482∈51] ➊
ᐸpersonᐳ"}}:::plan First480 --> PgSelectSingle482 - Object564{{"Object[564∈52] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List563{{"List[563∈52] ➊
ᐸ562ᐳ"}}:::plan - Constant560 & Constant538 & List563 --> Object564 + Object572{{"Object[572∈52] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List571{{"List[571∈52] ➊
ᐸ570ᐳ"}}:::plan + Constant568 & Constant542 & List571 --> Object572 PgClassExpression483{{"PgClassExpression[483∈52] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle482 --> PgClassExpression483 First489{{"First[489∈52] ➊"}}:::plan PgSelectRows490[["PgSelectRows[490∈52] ➊"]]:::plan PgSelectRows490 --> First489 - Object564 --> PgSelectRows490 + Object572 --> PgSelectRows490 PgSelectSingle491{{"PgSelectSingle[491∈52] ➊
ᐸperson_secretᐳ"}}:::plan First489 --> PgSelectSingle491 - RemapKeys562{{"RemapKeys[562∈52] ➊
ᐸ482:{”0”:1,”1”:2}ᐳ"}}:::plan - PgSelectSingle482 --> RemapKeys562 - RemapKeys562 --> List563 + RemapKeys570{{"RemapKeys[570∈52] ➊
ᐸ482:{”0”:1,”1”:2}ᐳ"}}:::plan + PgSelectSingle482 --> RemapKeys570 + RemapKeys570 --> List571 PgClassExpression492{{"PgClassExpression[492∈53] ➊
ᐸ__person_s..._.”sekrit”ᐳ"}}:::plan PgSelectSingle491 --> PgClassExpression492 PgSelect509[["PgSelect[509∈54] ➊
ᐸpersonᐳ"]]:::plan PgClassExpression508{{"PgClassExpression[508∈54] ➊
ᐸ__post__.”author_id”ᐳ"}}:::plan - PgSelectInlineApply565["PgSelectInlineApply[565∈54] ➊"]:::plan - Object11 & PgClassExpression508 & PgSelectInlineApply565 --> PgSelect509 + PgSelectInlineApply573["PgSelectInlineApply[573∈54] ➊"]:::plan + Object11 & PgClassExpression508 & PgSelectInlineApply573 --> PgSelect509 PgClassExpression506{{"PgClassExpression[506∈54] ➊
ᐸ__post__.”id”ᐳ"}}:::plan PgSelectSingle505 --> PgClassExpression506 PgClassExpression507{{"PgClassExpression[507∈54] ➊
ᐸ__post__.”headline”ᐳ"}}:::plan @@ -771,20 +781,20 @@ graph TD PgSelect509 --> PgSelectRows514 PgSelectSingle515{{"PgSelectSingle[515∈54] ➊
ᐸpersonᐳ"}}:::plan First513 --> PgSelectSingle515 - Object570{{"Object[570∈55] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List569{{"List[569∈55] ➊
ᐸ568ᐳ"}}:::plan - Constant566 & Constant538 & List569 --> Object570 + Object578{{"Object[578∈55] ➊
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List577{{"List[577∈55] ➊
ᐸ576ᐳ"}}:::plan + Constant574 & Constant542 & List577 --> Object578 PgClassExpression516{{"PgClassExpression[516∈55] ➊
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle515 --> PgClassExpression516 First522{{"First[522∈55] ➊"}}:::plan PgSelectRows523[["PgSelectRows[523∈55] ➊"]]:::plan PgSelectRows523 --> First522 - Object570 --> PgSelectRows523 + Object578 --> PgSelectRows523 PgSelectSingle524{{"PgSelectSingle[524∈55] ➊
ᐸperson_secretᐳ"}}:::plan First522 --> PgSelectSingle524 - RemapKeys568{{"RemapKeys[568∈55] ➊
ᐸ515:{”0”:1,”1”:2}ᐳ"}}:::plan - PgSelectSingle515 --> RemapKeys568 - RemapKeys568 --> List569 + RemapKeys576{{"RemapKeys[576∈55] ➊
ᐸ515:{”0”:1,”1”:2}ᐳ"}}:::plan + PgSelectSingle515 --> RemapKeys576 + RemapKeys576 --> List577 PgClassExpression525{{"PgClassExpression[525∈56] ➊
ᐸ__person_s..._.”sekrit”ᐳ"}}:::plan PgSelectSingle524 --> PgClassExpression525 __Item530[/"__Item[530∈57]
ᐸ529ᐳ"\]:::itemplan @@ -799,33 +809,33 @@ graph TD %% define steps subgraph "Buckets for queries/v4/function-return-types" - Bucket0("Bucket 0 (root)

1:
ᐳ: 9, 10, 59, 64, 76, 96, 106, 537, 538, 543, 548, 554, 560, 566, 571, 572, 573, 574, 575, 576, 577, 578, 579, 11, 12, 20, 35, 70, 84, 85, 120, 145, 164, 185, 207, 238, 239, 254, 255, 318, 358, 386, 459
2: 8, 18, 25, 33, 135, 143, 176, 196, 221, 227, 267, 384, 457, 527
3: 14, 22, 28, 37, 138, 147, 179, 199, 224, 230, 270, 388, 461, 529
ᐳ: 13, 15, 16, 21, 23, 24, 27, 29, 30, 36, 38, 137, 139, 146, 148, 178, 180, 198, 200, 223, 225, 226, 229, 231, 269, 271, 387, 389, 460, 462"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 9, 10, 59, 64, 76, 96, 106, 541, 542, 547, 556, 562, 568, 574, 579, 580, 581, 582, 583, 584, 585, 586, 587, 11, 12, 20, 35, 70, 84, 85, 120, 145, 164, 185, 207, 238, 239, 254, 255, 318, 358, 386, 459
2: 8, 18, 25, 33, 135, 143, 176, 196, 221, 227, 267, 384, 457, 527
3: 14, 22, 28, 37, 138, 147, 179, 199, 224, 230, 270, 388, 461, 529
ᐳ: 13, 15, 16, 21, 23, 24, 27, 29, 30, 36, 38, 137, 139, 146, 148, 178, 180, 198, 200, 223, 225, 226, 229, 231, 269, 271, 387, 389, 460, 462"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,PgFromExpression12,First13,PgSelectRows14,PgSelectSingle15,PgClassExpression16,PgSelect18,PgFromExpression20,First21,PgSelectRows22,PgSelectSingle23,PgClassExpression24,PgSelect25,First27,PgSelectRows28,PgSelectSingle29,PgClassExpression30,PgSelect33,PgFromExpression35,First36,PgSelectRows37,PgSelectSingle38,Constant59,Connection70,Constant76,PgFromExpression84,Connection85,PgFromExpression96,PgFromExpression106,Connection120,PgSelect135,First137,PgSelectRows138,PgSelectSingle139,PgSelect143,PgFromExpression145,First146,PgSelectRows147,PgSelectSingle148,Connection164,PgSelect176,First178,PgSelectRows179,PgSelectSingle180,Connection185,PgSelect196,First198,PgSelectRows199,PgSelectSingle200,Connection207,PgSelect221,First223,PgSelectRows224,PgSelectSingle225,PgClassExpression226,PgSelect227,First229,PgSelectRows230,PgSelectSingle231,PgFromExpression238,Connection239,PgFromExpression254,Connection255,PgSelect267,First269,PgSelectRows270,PgSelectSingle271,Connection318,PgFromExpression358,PgSelect384,PgFromExpression386,First387,PgSelectRows388,PgSelectSingle389,PgSelect457,PgFromExpression459,First460,PgSelectRows461,PgSelectSingle462,PgSelect527,PgSelectRows529,Constant537,Constant538,Constant543,Constant548,Constant554,Constant560,Constant566,Constant571,Constant572,Constant573,Constant574,Constant575,Constant576,Constant577,Constant578,Constant579 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 38, 11, 59, 70, 64, 76

ROOT PgSelectSingleᐸfunc_out_complexᐳ[38]
1:
ᐳ: 39, 40, 52, 45, 55
2: PgSelect[41], PgSelect[53]
3: PgSelectRows[47], PgSelectRows[57]
ᐳ: 46, 48, 56, 58"):::bucket + class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,PgFromExpression12,First13,PgSelectRows14,PgSelectSingle15,PgClassExpression16,PgSelect18,PgFromExpression20,First21,PgSelectRows22,PgSelectSingle23,PgClassExpression24,PgSelect25,First27,PgSelectRows28,PgSelectSingle29,PgClassExpression30,PgSelect33,PgFromExpression35,First36,PgSelectRows37,PgSelectSingle38,Constant59,Connection70,Constant76,PgFromExpression84,Connection85,PgFromExpression96,PgFromExpression106,Connection120,PgSelect135,First137,PgSelectRows138,PgSelectSingle139,PgSelect143,PgFromExpression145,First146,PgSelectRows147,PgSelectSingle148,Connection164,PgSelect176,First178,PgSelectRows179,PgSelectSingle180,Connection185,PgSelect196,First198,PgSelectRows199,PgSelectSingle200,Connection207,PgSelect221,First223,PgSelectRows224,PgSelectSingle225,PgClassExpression226,PgSelect227,First229,PgSelectRows230,PgSelectSingle231,PgFromExpression238,Connection239,PgFromExpression254,Connection255,PgSelect267,First269,PgSelectRows270,PgSelectSingle271,Connection318,PgFromExpression358,PgSelect384,PgFromExpression386,First387,PgSelectRows388,PgSelectSingle389,PgSelect457,PgFromExpression459,First460,PgSelectRows461,PgSelectSingle462,PgSelect527,PgSelectRows529,Constant541,Constant542,Constant547,Constant556,Constant562,Constant568,Constant574,Constant579,Constant580,Constant581,Constant582,Constant583,Constant584,Constant585,Constant586,Constant587 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 38, 11, 64, 59, 76, 70

ROOT PgSelectSingleᐸfunc_out_complexᐳ[38]
1: PgSelectInlineApply[536]
ᐳ: 39, 40, 52, 45, 55
2: PgSelect[41], PgSelect[53]
3: PgSelectRows[47], PgSelectRows[57]
ᐳ: 46, 48, 56, 58"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgClassExpression39,PgClassExpression40,PgSelect41,PgFromExpression45,First46,PgSelectRows47,PgSelectSingle48,PgClassExpression52,PgSelect53,PgFromExpression55,First56,PgSelectRows57,PgSelectSingle58 bucket1 + class Bucket1,PgClassExpression39,PgClassExpression40,PgSelect41,PgFromExpression45,First46,PgSelectRows47,PgSelectSingle48,PgClassExpression52,PgSelect53,PgFromExpression55,First56,PgSelectRows57,PgSelectSingle58,PgSelectInlineApply536 bucket1 Bucket2("Bucket 2 (nullableBoundary)
Deps: 48

ROOT PgSelectSingle{1}ᐸfrmcdc_compoundTypeᐳ[48]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,PgClassExpression49,PgClassExpression50,PgClassExpression51 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 58, 59, 11, 70, 64, 76

ROOT PgSelectSingle{1}ᐸpersonᐳ[58]
1:
ᐳ: 60, 63, 61, 62
2: PgSelect[72]
3: PgSelectRows[73]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 58, 59, 53, 56, 76, 70

ROOT PgSelectSingle{1}ᐸpersonᐳ[58]
1:
ᐳ: 60, 63, 537, 61, 62, 538, 539
2: PgSelectRows[73]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression60,List61,Lambda62,PgClassExpression63,PgSelect72,PgSelectRows73 bucket3 + class Bucket3,PgClassExpression60,List61,Lambda62,PgClassExpression63,PgSelectRows73,Access537,List538,Lambda539 bucket3 Bucket4("Bucket 4 (listItem)
Deps: 76

ROOT __Item{4}ᐸ73ᐳ[74]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item74,PgSelectSingle75 bucket4 Bucket5("Bucket 5 (nullableBoundary)
Deps: 75, 76

ROOT PgSelectSingle{4}ᐸpostᐳ[75]"):::bucket classDef bucket5 stroke:#7fff00 class Bucket5,PgClassExpression77,List78,Lambda79 bucket5 - Bucket6("Bucket 6 (nullableBoundary)
Deps: 11, 84, 85, 64, 96, 106, 537, 538, 543, 59, 120, 76

ROOT Connectionᐸ82ᐳ[85]
1: 130, 536, 542
2: PgSelect[86], PgSelectRows[132]
ᐳ: 131, 133, 134
3: PgSelectRows[87]"):::bucket + Bucket6("Bucket 6 (nullableBoundary)
Deps: 11, 84, 85, 64, 96, 106, 541, 542, 547, 59, 120, 76

ROOT Connectionᐸ82ᐳ[85]
1: 130, 540, 546
2: PgSelect[86], PgSelectRows[132]
ᐳ: 131, 133, 134
3: PgSelectRows[87]"):::bucket classDef bucket6 stroke:#ff1493 - class Bucket6,PgSelect86,PgSelectRows87,PgSelect130,First131,PgSelectRows132,PgSelectSingle133,PgClassExpression134,PgSelectInlineApply536,PgSelectInlineApply542 bucket6 - Bucket7("Bucket 7 (listItem)
Deps: 537, 538, 543, 59, 11, 120, 64, 76

ROOT __Item{7}ᐸ87ᐳ[88]"):::bucket + class Bucket6,PgSelect86,PgSelectRows87,PgSelect130,First131,PgSelectRows132,PgSelectSingle133,PgClassExpression134,PgSelectInlineApply540,PgSelectInlineApply546 bucket6 + Bucket7("Bucket 7 (listItem)
Deps: 541, 542, 547, 59, 11, 120, 64, 76

ROOT __Item{7}ᐸ87ᐳ[88]"):::bucket classDef bucket7 stroke:#808000 class Bucket7,__Item88,PgSelectSingle89 bucket7 - Bucket8("Bucket 8 (nullableBoundary)
Deps: 89, 537, 538, 543, 59, 11, 120, 64, 76

ROOT PgSelectSingle{7}ᐸfunc_out_complex_setofᐳ[89]
1:
ᐳ: 90, 539, 544, 540, 541, 545, 546
2: PgSelectRows[98], PgSelectRows[108]
ᐳ: 97, 99, 107, 109"):::bucket + Bucket8("Bucket 8 (nullableBoundary)
Deps: 89, 541, 542, 547, 59, 11, 120, 64, 76

ROOT PgSelectSingle{7}ᐸfunc_out_complex_setofᐳ[89]
1:
ᐳ: 90, 543, 548, 544, 545, 549, 550
2: PgSelectRows[98], PgSelectRows[108]
ᐳ: 97, 99, 107, 109"):::bucket classDef bucket8 stroke:#dda0dd - class Bucket8,PgClassExpression90,First97,PgSelectRows98,PgSelectSingle99,First107,PgSelectRows108,PgSelectSingle109,RemapKeys539,List540,Object541,RemapKeys544,List545,Object546 bucket8 + class Bucket8,PgClassExpression90,First97,PgSelectRows98,PgSelectSingle99,First107,PgSelectRows108,PgSelectSingle109,RemapKeys543,List544,Object545,RemapKeys548,List549,Object550 bucket8 Bucket9("Bucket 9 (nullableBoundary)
Deps: 99

ROOT PgSelectSingle{8}ᐸfrmcdc_compoundTypeᐳ[99]"):::bucket classDef bucket9 stroke:#ff0000 class Bucket9,PgClassExpression100,PgClassExpression101,PgClassExpression102 bucket9 @@ -895,18 +905,18 @@ graph TD Bucket31("Bucket 31 (listItem)

ROOT __Item{31}ᐸ257ᐳ[258]"):::bucket classDef bucket31 stroke:#a52a2a class Bucket31,__Item258,PgSelectSingle259,PgClassExpression260 bucket31 - Bucket32("Bucket 32 (nullableBoundary)
Deps: 271, 59, 11, 573, 574, 318, 64, 76

ROOT PgSelectSingleᐸpersonᐳ[271]
1:
ᐳ: 273, 276, 279, 359, 371, 274, 275, 284, 331, 340, 364, 375
2: 280, 329, 338, 362, 373
3: 286, 333, 342, 366, 377
ᐳ: 285, 287, 332, 334, 341, 343, 365, 367, 376, 378"):::bucket + Bucket32("Bucket 32 (nullableBoundary)
Deps: 271, 59, 11, 581, 582, 64, 76, 318

ROOT PgSelectSingleᐸpersonᐳ[271]
1:
ᐳ: 273, 276, 279, 359, 371, 274, 275, 284, 331, 340, 364, 375
2: 280, 329, 338, 362, 373
3: 286, 333, 342, 366, 377
ᐳ: 285, 287, 332, 334, 341, 343, 365, 367, 376, 378"):::bucket classDef bucket32 stroke:#ff00ff class Bucket32,PgClassExpression273,List274,Lambda275,PgClassExpression276,PgClassExpression279,PgSelect280,PgFromExpression284,First285,PgSelectRows286,PgSelectSingle287,PgSelect329,PgFromExpression331,First332,PgSelectRows333,PgSelectSingle334,PgSelect338,PgFromExpression340,First341,PgSelectRows342,PgSelectSingle343,PgClassExpression359,PgSelect362,PgFromExpression364,First365,PgSelectRows366,PgSelectSingle367,PgClassExpression371,PgSelect373,PgFromExpression375,First376,PgSelectRows377,PgSelectSingle378 bucket32 - Bucket33("Bucket 33 (nullableBoundary)
Deps: 287, 11, 59, 318, 64, 76

ROOT PgSelectSingle{32}ᐸperson_computed_complexᐳ[287]
1:
ᐳ: 288, 289, 301, 294, 304
2: PgSelect[290], PgSelect[302]
3: PgSelectRows[296], PgSelectRows[306]
ᐳ: 295, 297, 305, 307"):::bucket + Bucket33("Bucket 33 (nullableBoundary)
Deps: 287, 11, 64, 59, 76, 318

ROOT PgSelectSingle{32}ᐸperson_computed_complexᐳ[287]
1: PgSelectInlineApply[551]
ᐳ: 288, 289, 301, 294, 304
2: PgSelect[290], PgSelect[302]
3: PgSelectRows[296], PgSelectRows[306]
ᐳ: 295, 297, 305, 307"):::bucket classDef bucket33 stroke:#f5deb3 - class Bucket33,PgClassExpression288,PgClassExpression289,PgSelect290,PgFromExpression294,First295,PgSelectRows296,PgSelectSingle297,PgClassExpression301,PgSelect302,PgFromExpression304,First305,PgSelectRows306,PgSelectSingle307 bucket33 + class Bucket33,PgClassExpression288,PgClassExpression289,PgSelect290,PgFromExpression294,First295,PgSelectRows296,PgSelectSingle297,PgClassExpression301,PgSelect302,PgFromExpression304,First305,PgSelectRows306,PgSelectSingle307,PgSelectInlineApply551 bucket33 Bucket34("Bucket 34 (nullableBoundary)
Deps: 297

ROOT PgSelectSingle{33}ᐸfrmcdc_compoundTypeᐳ[297]"):::bucket classDef bucket34 stroke:#696969 class Bucket34,PgClassExpression298,PgClassExpression299,PgClassExpression300 bucket34 - Bucket35("Bucket 35 (nullableBoundary)
Deps: 307, 59, 11, 318, 64, 76

ROOT PgSelectSingle{33}ᐸpersonᐳ[307]
1:
ᐳ: 309, 312, 310, 311
2: PgSelect[320]
3: PgSelectRows[321]"):::bucket + Bucket35("Bucket 35 (nullableBoundary)
Deps: 307, 59, 302, 305, 76, 318

ROOT PgSelectSingle{33}ᐸpersonᐳ[307]
1:
ᐳ: 309, 312, 552, 310, 311, 553, 554
2: PgSelectRows[321]"):::bucket classDef bucket35 stroke:#00bfff - class Bucket35,PgClassExpression309,List310,Lambda311,PgClassExpression312,PgSelect320,PgSelectRows321 bucket35 + class Bucket35,PgClassExpression309,List310,Lambda311,PgClassExpression312,PgSelectRows321,Access552,List553,Lambda554 bucket35 Bucket36("Bucket 36 (listItem)
Deps: 76

ROOT __Item{36}ᐸ321ᐳ[322]"):::bucket classDef bucket36 stroke:#7f007f class Bucket36,__Item322,PgSelectSingle323 bucket36 @@ -928,45 +938,45 @@ graph TD Bucket42("Bucket 42 (nullableBoundary)
Deps: 378

ROOT PgSelectSingle{32}ᐸperson_computed_out_outᐳ[378]"):::bucket classDef bucket42 stroke:#dda0dd class Bucket42,PgClassExpression379,PgClassExpression380 bucket42 - Bucket43("Bucket 43 (nullableBoundary)
Deps: 389, 11, 548, 538, 554

ROOT PgSelectSingleᐸquery_output_two_rowsᐳ[389]
1:
ᐳ: 390, 426, 453, 395, 429
2: PgSelect[391], PgSelect[427]
3: PgSelectRows[397], PgSelectRows[431]
ᐳ: 396, 398, 430, 432"):::bucket + Bucket43("Bucket 43 (nullableBoundary)
Deps: 389, 11, 556, 542, 562

ROOT PgSelectSingleᐸquery_output_two_rowsᐳ[389]
1:
ᐳ: 390, 426, 453, 395, 429
2: PgSelect[391], PgSelect[427]
3: PgSelectRows[397], PgSelectRows[431]
ᐳ: 396, 398, 430, 432"):::bucket classDef bucket43 stroke:#ff0000 class Bucket43,PgClassExpression390,PgSelect391,PgFromExpression395,First396,PgSelectRows397,PgSelectSingle398,PgClassExpression426,PgSelect427,PgFromExpression429,First430,PgSelectRows431,PgSelectSingle432,PgClassExpression453 bucket43 - Bucket44("Bucket 44 (nullableBoundary)
Deps: 398, 11, 548, 538

ROOT PgSelectSingle{43}ᐸleft_armᐳ[398]
1: PgSelectInlineApply[547]
ᐳ: 399, 400, 401, 402
2: PgSelect[403]
3: PgSelectRows[408]
ᐳ: First[407], PgSelectSingle[409]"):::bucket + Bucket44("Bucket 44 (nullableBoundary)
Deps: 398, 11, 556, 542

ROOT PgSelectSingle{43}ᐸleft_armᐳ[398]
1: PgSelectInlineApply[555]
ᐳ: 399, 400, 401, 402
2: PgSelect[403]
3: PgSelectRows[408]
ᐳ: First[407], PgSelectSingle[409]"):::bucket classDef bucket44 stroke:#ffff00 - class Bucket44,PgClassExpression399,PgClassExpression400,PgClassExpression401,PgClassExpression402,PgSelect403,First407,PgSelectRows408,PgSelectSingle409,PgSelectInlineApply547 bucket44 - Bucket45("Bucket 45 (nullableBoundary)
Deps: 409, 548, 538

ROOT PgSelectSingle{44}ᐸpersonᐳ[409]
1:
ᐳ: 410, 550, 551, 552
2: PgSelectRows[417]
ᐳ: First[416], PgSelectSingle[418]"):::bucket + class Bucket44,PgClassExpression399,PgClassExpression400,PgClassExpression401,PgClassExpression402,PgSelect403,First407,PgSelectRows408,PgSelectSingle409,PgSelectInlineApply555 bucket44 + Bucket45("Bucket 45 (nullableBoundary)
Deps: 409, 556, 542

ROOT PgSelectSingle{44}ᐸpersonᐳ[409]
1:
ᐳ: 410, 558, 559, 560
2: PgSelectRows[417]
ᐳ: First[416], PgSelectSingle[418]"):::bucket classDef bucket45 stroke:#00ffff - class Bucket45,PgClassExpression410,First416,PgSelectRows417,PgSelectSingle418,RemapKeys550,List551,Object552 bucket45 + class Bucket45,PgClassExpression410,First416,PgSelectRows417,PgSelectSingle418,RemapKeys558,List559,Object560 bucket45 Bucket46("Bucket 46 (nullableBoundary)
Deps: 418

ROOT PgSelectSingle{45}ᐸperson_secretᐳ[418]"):::bucket classDef bucket46 stroke:#4169e1 class Bucket46,PgClassExpression419 bucket46 - Bucket47("Bucket 47 (nullableBoundary)
Deps: 432, 11, 554, 538

ROOT PgSelectSingle{43}ᐸpostᐳ[432]
1: PgSelectInlineApply[553]
ᐳ: 433, 434, 435
2: PgSelect[436]
3: PgSelectRows[441]
ᐳ: First[440], PgSelectSingle[442]"):::bucket + Bucket47("Bucket 47 (nullableBoundary)
Deps: 432, 11, 562, 542

ROOT PgSelectSingle{43}ᐸpostᐳ[432]
1: PgSelectInlineApply[561]
ᐳ: 433, 434, 435
2: PgSelect[436]
3: PgSelectRows[441]
ᐳ: First[440], PgSelectSingle[442]"):::bucket classDef bucket47 stroke:#3cb371 - class Bucket47,PgClassExpression433,PgClassExpression434,PgClassExpression435,PgSelect436,First440,PgSelectRows441,PgSelectSingle442,PgSelectInlineApply553 bucket47 - Bucket48("Bucket 48 (nullableBoundary)
Deps: 442, 554, 538

ROOT PgSelectSingle{47}ᐸpersonᐳ[442]
1:
ᐳ: 443, 556, 557, 558
2: PgSelectRows[450]
ᐳ: First[449], PgSelectSingle[451]"):::bucket + class Bucket47,PgClassExpression433,PgClassExpression434,PgClassExpression435,PgSelect436,First440,PgSelectRows441,PgSelectSingle442,PgSelectInlineApply561 bucket47 + Bucket48("Bucket 48 (nullableBoundary)
Deps: 442, 562, 542

ROOT PgSelectSingle{47}ᐸpersonᐳ[442]
1:
ᐳ: 443, 564, 565, 566
2: PgSelectRows[450]
ᐳ: First[449], PgSelectSingle[451]"):::bucket classDef bucket48 stroke:#a52a2a - class Bucket48,PgClassExpression443,First449,PgSelectRows450,PgSelectSingle451,RemapKeys556,List557,Object558 bucket48 + class Bucket48,PgClassExpression443,First449,PgSelectRows450,PgSelectSingle451,RemapKeys564,List565,Object566 bucket48 Bucket49("Bucket 49 (nullableBoundary)
Deps: 451

ROOT PgSelectSingle{48}ᐸperson_secretᐳ[451]"):::bucket classDef bucket49 stroke:#ff00ff class Bucket49,PgClassExpression452 bucket49 - Bucket50("Bucket 50 (nullableBoundary)
Deps: 462, 11, 560, 538, 566

ROOT PgSelectSingleᐸquery_output_two_rowsᐳ[462]
1:
ᐳ: 463, 499, 526, 468, 502
2: PgSelect[464], PgSelect[500]
3: PgSelectRows[470], PgSelectRows[504]
ᐳ: 469, 471, 503, 505"):::bucket + Bucket50("Bucket 50 (nullableBoundary)
Deps: 462, 11, 568, 542, 574

ROOT PgSelectSingleᐸquery_output_two_rowsᐳ[462]
1:
ᐳ: 463, 499, 526, 468, 502
2: PgSelect[464], PgSelect[500]
3: PgSelectRows[470], PgSelectRows[504]
ᐳ: 469, 471, 503, 505"):::bucket classDef bucket50 stroke:#f5deb3 class Bucket50,PgClassExpression463,PgSelect464,PgFromExpression468,First469,PgSelectRows470,PgSelectSingle471,PgClassExpression499,PgSelect500,PgFromExpression502,First503,PgSelectRows504,PgSelectSingle505,PgClassExpression526 bucket50 - Bucket51("Bucket 51 (nullableBoundary)
Deps: 471, 11, 560, 538

ROOT PgSelectSingle{50}ᐸleft_armᐳ[471]
1: PgSelectInlineApply[559]
ᐳ: 472, 473, 474, 475
2: PgSelect[476]
3: PgSelectRows[481]
ᐳ: First[480], PgSelectSingle[482]"):::bucket + Bucket51("Bucket 51 (nullableBoundary)
Deps: 471, 11, 568, 542

ROOT PgSelectSingle{50}ᐸleft_armᐳ[471]
1: PgSelectInlineApply[567]
ᐳ: 472, 473, 474, 475
2: PgSelect[476]
3: PgSelectRows[481]
ᐳ: First[480], PgSelectSingle[482]"):::bucket classDef bucket51 stroke:#696969 - class Bucket51,PgClassExpression472,PgClassExpression473,PgClassExpression474,PgClassExpression475,PgSelect476,First480,PgSelectRows481,PgSelectSingle482,PgSelectInlineApply559 bucket51 - Bucket52("Bucket 52 (nullableBoundary)
Deps: 482, 560, 538

ROOT PgSelectSingle{51}ᐸpersonᐳ[482]
1:
ᐳ: 483, 562, 563, 564
2: PgSelectRows[490]
ᐳ: First[489], PgSelectSingle[491]"):::bucket + class Bucket51,PgClassExpression472,PgClassExpression473,PgClassExpression474,PgClassExpression475,PgSelect476,First480,PgSelectRows481,PgSelectSingle482,PgSelectInlineApply567 bucket51 + Bucket52("Bucket 52 (nullableBoundary)
Deps: 482, 568, 542

ROOT PgSelectSingle{51}ᐸpersonᐳ[482]
1:
ᐳ: 483, 570, 571, 572
2: PgSelectRows[490]
ᐳ: First[489], PgSelectSingle[491]"):::bucket classDef bucket52 stroke:#00bfff - class Bucket52,PgClassExpression483,First489,PgSelectRows490,PgSelectSingle491,RemapKeys562,List563,Object564 bucket52 + class Bucket52,PgClassExpression483,First489,PgSelectRows490,PgSelectSingle491,RemapKeys570,List571,Object572 bucket52 Bucket53("Bucket 53 (nullableBoundary)
Deps: 491

ROOT PgSelectSingle{52}ᐸperson_secretᐳ[491]"):::bucket classDef bucket53 stroke:#7f007f class Bucket53,PgClassExpression492 bucket53 - Bucket54("Bucket 54 (nullableBoundary)
Deps: 505, 11, 566, 538

ROOT PgSelectSingle{50}ᐸpostᐳ[505]
1: PgSelectInlineApply[565]
ᐳ: 506, 507, 508
2: PgSelect[509]
3: PgSelectRows[514]
ᐳ: First[513], PgSelectSingle[515]"):::bucket + Bucket54("Bucket 54 (nullableBoundary)
Deps: 505, 11, 574, 542

ROOT PgSelectSingle{50}ᐸpostᐳ[505]
1: PgSelectInlineApply[573]
ᐳ: 506, 507, 508
2: PgSelect[509]
3: PgSelectRows[514]
ᐳ: First[513], PgSelectSingle[515]"):::bucket classDef bucket54 stroke:#ffa500 - class Bucket54,PgClassExpression506,PgClassExpression507,PgClassExpression508,PgSelect509,First513,PgSelectRows514,PgSelectSingle515,PgSelectInlineApply565 bucket54 - Bucket55("Bucket 55 (nullableBoundary)
Deps: 515, 566, 538

ROOT PgSelectSingle{54}ᐸpersonᐳ[515]
1:
ᐳ: 516, 568, 569, 570
2: PgSelectRows[523]
ᐳ: First[522], PgSelectSingle[524]"):::bucket + class Bucket54,PgClassExpression506,PgClassExpression507,PgClassExpression508,PgSelect509,First513,PgSelectRows514,PgSelectSingle515,PgSelectInlineApply573 bucket54 + Bucket55("Bucket 55 (nullableBoundary)
Deps: 515, 574, 542

ROOT PgSelectSingle{54}ᐸpersonᐳ[515]
1:
ᐳ: 516, 576, 577, 578
2: PgSelectRows[523]
ᐳ: First[522], PgSelectSingle[524]"):::bucket classDef bucket55 stroke:#0000ff - class Bucket55,PgClassExpression516,First522,PgSelectRows523,PgSelectSingle524,RemapKeys568,List569,Object570 bucket55 + class Bucket55,PgClassExpression516,First522,PgSelectRows523,PgSelectSingle524,RemapKeys576,List577,Object578 bucket55 Bucket56("Bucket 56 (nullableBoundary)
Deps: 524

ROOT PgSelectSingle{55}ᐸperson_secretᐳ[524]"):::bucket classDef bucket56 stroke:#7fff00 class Bucket56,PgClassExpression525 bucket56 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.sql b/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.sql index f253a49510..45d710f142 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/function-return-types.sql @@ -113,7 +113,17 @@ from (select ($1::"c"."compound_type").*) as __frmcdc_compound_type__; select __person__."id"::text as "0", - __person__."person_full_name" as "1" + __person__."person_full_name" as "1", + array( + select array[ + __post__."id"::text + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" + ) + order by __post__."id" asc + )::text as "2" from (select ($1::"c"."person").*) as __person__; select @@ -230,14 +240,6 @@ select __post__."author_id"::text as "2" from (select ($1::"a"."post").*) as __post__; -select - __post__."id"::text as "0" -from "a"."post" as __post__ -where ( - __post__."author_id" = $1::"int4" -) -order by __post__."id" asc; - select __func_out_complex_setof__."x"::text as "0", __frmcdc_compound_type__."a"::text as "1", @@ -256,6 +258,11 @@ on TRUE left outer join lateral (select (__func_out_complex_setof__."z").*) as __person__ on TRUE; +select + __person__."id"::text as "0", + __person__."person_full_name" as "1" +from (select ($1::"c"."person").*) as __person__; + select __person__."person_full_name" as "0", __person_secret__."sekrit" as "1", @@ -282,4 +289,12 @@ on ( )) where ( __person__."id" = $1::"int4" -); \ No newline at end of file +); + +select + __post__."id"::text as "0" +from "a"."post" as __post__ +where ( + __post__."author_id" = $1::"int4" +) +order by __post__."id" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.mermaid index c98c2faf13..966f716886 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.mermaid @@ -11,17 +11,18 @@ graph TD %% plan dependencies PgSelect7[["PgSelect[7∈0] ➊
ᐸmachineᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Constant80{{"Constant[80∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant84{{"Constant[84∈0] ➊
ᐸ1ᐳ"}}:::plan PgSelectInlineApply74["PgSelectInlineApply[74∈0] ➊"]:::plan - Object10 & Constant80 & PgSelectInlineApply74 --> PgSelect7 + Object10 & Constant84 & PgSelectInlineApply74 --> PgSelect7 + PgSelect26[["PgSelect[26∈0] ➊
ᐸbuildingᐳ"]]:::plan + Constant85{{"Constant[85∈0] ➊
ᐸ2ᐳ"}}:::plan + PgSelectInlineApply80["PgSelectInlineApply[80∈0] ➊"]:::plan + Object10 & Constant85 & PgSelectInlineApply80 --> PgSelect26 Connection38{{"Connection[38∈0] ➊
ᐸ34ᐳ"}}:::plan Connection51{{"Connection[51∈0] ➊
ᐸ49ᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 - PgSelect26[["PgSelect[26∈0] ➊
ᐸbuildingᐳ"]]:::plan - Constant81{{"Constant[81∈0] ➊
ᐸ2ᐳ"}}:::plan - Object10 & Constant81 --> PgSelect26 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access8 __Value2 --> Access9 @@ -58,14 +59,16 @@ graph TD PgSelectSingle21 --> PgClassExpression22 PgClassExpression23{{"PgClassExpression[23∈2] ➊
ᐸ__building...nstructor”ᐳ"}}:::plan PgSelectSingle21 --> PgClassExpression23 - PgSelect40[["PgSelect[40∈3] ➊
ᐸmachineᐳ"]]:::plan - PgClassExpression33{{"PgClassExpression[33∈3] ➊
ᐸ__building...nstructor”ᐳ"}}:::plan - Object10 & PgClassExpression33 & Connection38 --> PgSelect40 - PgSelectSingle30 --> PgClassExpression33 + List82{{"List[82∈3] ➊
ᐸ28,81ᐳ"}}:::plan + Access81{{"Access[81∈3] ➊
ᐸ26.m.subqueryDetailsFor40ᐳ"}}:::plan + First28 & Access81 --> List82 PgSelectRows41[["PgSelectRows[41∈3] ➊"]]:::plan - PgSelect40 --> PgSelectRows41 + Lambda83{{"Lambda[83∈3] ➊"}}:::plan + Lambda83 --> PgSelectRows41 PgClassExpression47{{"PgClassExpression[47∈3] ➊
ᐸ__building__.”name”ᐳ"}}:::plan PgSelectSingle30 --> PgClassExpression47 + PgSelect26 --> Access81 + List82 --> Lambda83 __Item42[/"__Item[42∈4]
ᐸ41ᐳ"\]:::itemplan PgSelectRows41 ==> __Item42 PgSelectSingle43{{"PgSelectSingle[43∈4]
ᐸmachineᐳ"}}:::plan @@ -114,18 +117,18 @@ graph TD %% define steps subgraph "Buckets for queries/v4/js-reserved-keywords" - Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[74]
ᐳ: 8, 9, 31, 75, 76, 80, 81, 10, 38, 51
2: PgSelect[7], PgSelect[26]
3: PgSelectRows[12], PgSelectRows[29]
ᐳ: 11, 13, 28, 30"):::bucket + Bucket0("Bucket 0 (root)

1: PgSelectInlineApply[74]
ᐳ: 8, 9, 31, 75, 76, 84, 85, 10, 38, 51
2: PgSelect[7], PgSelectInlineApply[80]
3: PgSelectRows[12], PgSelect[26]
ᐳ: First[11], PgSelectSingle[13]
4: PgSelectRows[29]
ᐳ: First[28], PgSelectSingle[30]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,PgSelect26,First28,PgSelectRows29,PgSelectSingle30,Connection38,Connection51,PgSelectInlineApply74,Constant75,Constant76,Constant80,Constant81 bucket0 + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,PgSelect26,First28,PgSelectRows29,PgSelectSingle30,Connection38,Connection51,PgSelectInlineApply74,Constant75,Constant76,PgSelectInlineApply80,Constant84,Constant85 bucket0 Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 75, 76

ROOT PgSelectSingleᐸmachineᐳ[13]
1:
ᐳ: 14, 24, 78, 79
2: PgSelectRows[20]
ᐳ: First[19], PgSelectSingle[21]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,PgClassExpression14,First19,PgSelectRows20,PgSelectSingle21,PgClassExpression24,List78,Object79 bucket1 Bucket2("Bucket 2 (nullableBoundary)
Deps: 21

ROOT PgSelectSingle{1}ᐸbuildingᐳ[21]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,PgClassExpression22,PgClassExpression23 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 30, 10, 38, 31

ROOT PgSelectSingleᐸbuildingᐳ[30]
1:
ᐳ: 33, 47
2: PgSelect[40]
3: PgSelectRows[41]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 30, 26, 28, 38

ROOT PgSelectSingleᐸbuildingᐳ[30]
1:
ᐳ: 47, 81, 82, 83
2: PgSelectRows[41]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression33,PgSelect40,PgSelectRows41,PgClassExpression47 bucket3 + class Bucket3,PgSelectRows41,PgClassExpression47,Access81,List82,Lambda83 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ41ᐳ[42]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item42,PgSelectSingle43 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.sql b/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.sql index 6f3759d25e..5371fd9079 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/js-reserved-keywords.sql @@ -15,24 +15,25 @@ where ( ); select - __building__."constructor" as "0", - __building__."name" as "1", - __building__."id"::text as "2" + __building__."name" as "0", + __building__."id"::text as "1", + array( + select array[ + __machine__."id"::text, + __machine__."constructor", + __machine__."input" + ]::text[] + from "js_reserved"."machine" as __machine__ + where ( + __machine__."constructor" = __building__."constructor" + ) + order by __machine__."id" asc + )::text as "2" from "js_reserved"."building" as __building__ where ( __building__."id" = $1::"int4" ); -select - __machine__."id"::text as "0", - __machine__."constructor" as "1", - __machine__."input" as "2" -from "js_reserved"."machine" as __machine__ -where ( - __machine__."constructor" = $1::"text" -) -order by __machine__."id" asc; - select __relational_items__."id"::text as "0", __relational_items__."constructor" as "1", diff --git a/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.mermaid index 3fa250d0b7..fd83eb7da1 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.mermaid @@ -10,340 +10,346 @@ graph TD %% plan dependencies Connection13{{"Connection[13∈0] ➊
ᐸ9ᐳ"}}:::plan - Constant445{{"Constant[445∈0] ➊
ᐸ1ᐳ"}}:::plan - Constant445 --> Connection13 + Constant449{{"Constant[449∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant449 --> Connection13 Connection26{{"Connection[26∈0] ➊
ᐸ22ᐳ"}}:::plan - Constant445 --> Connection26 + Constant449 --> Connection26 Object12{{"Object[12∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access11{{"Access[11∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access10 & Access11 --> Object12 PgFromExpression35{{"PgFromExpression[35∈0] ➊"}}:::plan - Constant445 --> PgFromExpression35 + Constant449 --> PgFromExpression35 PgFromExpression39{{"PgFromExpression[39∈0] ➊"}}:::plan - Constant446{{"Constant[446∈0] ➊
ᐸ2ᐳ"}}:::plan - Constant446 --> PgFromExpression39 + Constant450{{"Constant[450∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant450 --> PgFromExpression39 PgFromExpression43{{"PgFromExpression[43∈0] ➊"}}:::plan - Constant447{{"Constant[447∈0] ➊
ᐸ3ᐳ"}}:::plan - Constant447 --> PgFromExpression43 + Constant451{{"Constant[451∈0] ➊
ᐸ3ᐳ"}}:::plan + Constant451 --> PgFromExpression43 PgFromExpression47{{"PgFromExpression[47∈0] ➊"}}:::plan - Constant448{{"Constant[448∈0] ➊
ᐸ4ᐳ"}}:::plan - Constant448 --> PgFromExpression47 + Constant452{{"Constant[452∈0] ➊
ᐸ4ᐳ"}}:::plan + Constant452 --> PgFromExpression47 PgFromExpression51{{"PgFromExpression[51∈0] ➊"}}:::plan - Constant449{{"Constant[449∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant449 --> PgFromExpression51 + Constant453{{"Constant[453∈0] ➊
ᐸ5ᐳ"}}:::plan + Constant453 --> PgFromExpression51 PgFromExpression55{{"PgFromExpression[55∈0] ➊"}}:::plan - Constant450{{"Constant[450∈0] ➊
ᐸ6ᐳ"}}:::plan - Constant450 --> PgFromExpression55 + Constant454{{"Constant[454∈0] ➊
ᐸ6ᐳ"}}:::plan + Constant454 --> PgFromExpression55 PgFromExpression59{{"PgFromExpression[59∈0] ➊"}}:::plan - Constant451{{"Constant[451∈0] ➊
ᐸ7ᐳ"}}:::plan - Constant451 --> PgFromExpression59 + Constant455{{"Constant[455∈0] ➊
ᐸ7ᐳ"}}:::plan + Constant455 --> PgFromExpression59 PgFromExpression63{{"PgFromExpression[63∈0] ➊"}}:::plan - Constant452{{"Constant[452∈0] ➊
ᐸ8ᐳ"}}:::plan - Constant452 --> PgFromExpression63 + Constant456{{"Constant[456∈0] ➊
ᐸ8ᐳ"}}:::plan + Constant456 --> PgFromExpression63 PgFromExpression67{{"PgFromExpression[67∈0] ➊"}}:::plan - Constant453{{"Constant[453∈0] ➊
ᐸ9ᐳ"}}:::plan - Constant453 --> PgFromExpression67 + Constant457{{"Constant[457∈0] ➊
ᐸ9ᐳ"}}:::plan + Constant457 --> PgFromExpression67 PgFromExpression71{{"PgFromExpression[71∈0] ➊"}}:::plan - Constant454{{"Constant[454∈0] ➊
ᐸ10ᐳ"}}:::plan - Constant454 --> PgFromExpression71 + Constant458{{"Constant[458∈0] ➊
ᐸ10ᐳ"}}:::plan + Constant458 --> PgFromExpression71 PgFromExpression75{{"PgFromExpression[75∈0] ➊"}}:::plan - Constant455{{"Constant[455∈0] ➊
ᐸ11ᐳ"}}:::plan - Constant455 --> PgFromExpression75 + Constant459{{"Constant[459∈0] ➊
ᐸ11ᐳ"}}:::plan + Constant459 --> PgFromExpression75 PgFromExpression79{{"PgFromExpression[79∈0] ➊"}}:::plan - Constant456{{"Constant[456∈0] ➊
ᐸ12ᐳ"}}:::plan - Constant456 --> PgFromExpression79 + Constant460{{"Constant[460∈0] ➊
ᐸ12ᐳ"}}:::plan + Constant460 --> PgFromExpression79 PgFromExpression83{{"PgFromExpression[83∈0] ➊"}}:::plan - Constant457{{"Constant[457∈0] ➊
ᐸ13ᐳ"}}:::plan - Constant457 --> PgFromExpression83 + Constant461{{"Constant[461∈0] ➊
ᐸ13ᐳ"}}:::plan + Constant461 --> PgFromExpression83 PgFromExpression87{{"PgFromExpression[87∈0] ➊"}}:::plan - Constant458{{"Constant[458∈0] ➊
ᐸ14ᐳ"}}:::plan - Constant458 --> PgFromExpression87 + Constant462{{"Constant[462∈0] ➊
ᐸ14ᐳ"}}:::plan + Constant462 --> PgFromExpression87 PgFromExpression91{{"PgFromExpression[91∈0] ➊"}}:::plan - Constant459{{"Constant[459∈0] ➊
ᐸ15ᐳ"}}:::plan - Constant459 --> PgFromExpression91 + Constant463{{"Constant[463∈0] ➊
ᐸ15ᐳ"}}:::plan + Constant463 --> PgFromExpression91 PgFromExpression95{{"PgFromExpression[95∈0] ➊"}}:::plan - Constant460{{"Constant[460∈0] ➊
ᐸ16ᐳ"}}:::plan - Constant460 --> PgFromExpression95 + Constant464{{"Constant[464∈0] ➊
ᐸ16ᐳ"}}:::plan + Constant464 --> PgFromExpression95 PgFromExpression99{{"PgFromExpression[99∈0] ➊"}}:::plan - Constant461{{"Constant[461∈0] ➊
ᐸ17ᐳ"}}:::plan - Constant461 --> PgFromExpression99 + Constant465{{"Constant[465∈0] ➊
ᐸ17ᐳ"}}:::plan + Constant465 --> PgFromExpression99 PgFromExpression103{{"PgFromExpression[103∈0] ➊"}}:::plan - Constant462{{"Constant[462∈0] ➊
ᐸ18ᐳ"}}:::plan - Constant462 --> PgFromExpression103 + Constant466{{"Constant[466∈0] ➊
ᐸ18ᐳ"}}:::plan + Constant466 --> PgFromExpression103 PgFromExpression107{{"PgFromExpression[107∈0] ➊"}}:::plan - Constant463{{"Constant[463∈0] ➊
ᐸ19ᐳ"}}:::plan - Constant463 --> PgFromExpression107 + Constant467{{"Constant[467∈0] ➊
ᐸ19ᐳ"}}:::plan + Constant467 --> PgFromExpression107 PgFromExpression111{{"PgFromExpression[111∈0] ➊"}}:::plan - Constant464{{"Constant[464∈0] ➊
ᐸ20ᐳ"}}:::plan - Constant464 --> PgFromExpression111 + Constant468{{"Constant[468∈0] ➊
ᐸ20ᐳ"}}:::plan + Constant468 --> PgFromExpression111 PgFromExpression115{{"PgFromExpression[115∈0] ➊"}}:::plan - Constant465{{"Constant[465∈0] ➊
ᐸ21ᐳ"}}:::plan - Constant465 --> PgFromExpression115 + Constant469{{"Constant[469∈0] ➊
ᐸ21ᐳ"}}:::plan + Constant469 --> PgFromExpression115 PgFromExpression119{{"PgFromExpression[119∈0] ➊"}}:::plan - Constant466{{"Constant[466∈0] ➊
ᐸ22ᐳ"}}:::plan - Constant466 --> PgFromExpression119 + Constant470{{"Constant[470∈0] ➊
ᐸ22ᐳ"}}:::plan + Constant470 --> PgFromExpression119 PgFromExpression123{{"PgFromExpression[123∈0] ➊"}}:::plan - Constant467{{"Constant[467∈0] ➊
ᐸ23ᐳ"}}:::plan - Constant467 --> PgFromExpression123 + Constant471{{"Constant[471∈0] ➊
ᐸ23ᐳ"}}:::plan + Constant471 --> PgFromExpression123 PgFromExpression127{{"PgFromExpression[127∈0] ➊"}}:::plan - Constant468{{"Constant[468∈0] ➊
ᐸ24ᐳ"}}:::plan - Constant468 --> PgFromExpression127 + Constant472{{"Constant[472∈0] ➊
ᐸ24ᐳ"}}:::plan + Constant472 --> PgFromExpression127 PgFromExpression131{{"PgFromExpression[131∈0] ➊"}}:::plan - Constant469{{"Constant[469∈0] ➊
ᐸ25ᐳ"}}:::plan - Constant469 --> PgFromExpression131 + Constant473{{"Constant[473∈0] ➊
ᐸ25ᐳ"}}:::plan + Constant473 --> PgFromExpression131 PgFromExpression135{{"PgFromExpression[135∈0] ➊"}}:::plan - Constant470{{"Constant[470∈0] ➊
ᐸ26ᐳ"}}:::plan - Constant470 --> PgFromExpression135 + Constant474{{"Constant[474∈0] ➊
ᐸ26ᐳ"}}:::plan + Constant474 --> PgFromExpression135 PgFromExpression139{{"PgFromExpression[139∈0] ➊"}}:::plan - Constant471{{"Constant[471∈0] ➊
ᐸ27ᐳ"}}:::plan - Constant471 --> PgFromExpression139 + Constant475{{"Constant[475∈0] ➊
ᐸ27ᐳ"}}:::plan + Constant475 --> PgFromExpression139 PgFromExpression143{{"PgFromExpression[143∈0] ➊"}}:::plan - Constant472{{"Constant[472∈0] ➊
ᐸ28ᐳ"}}:::plan - Constant472 --> PgFromExpression143 + Constant476{{"Constant[476∈0] ➊
ᐸ28ᐳ"}}:::plan + Constant476 --> PgFromExpression143 PgFromExpression147{{"PgFromExpression[147∈0] ➊"}}:::plan - Constant473{{"Constant[473∈0] ➊
ᐸ29ᐳ"}}:::plan - Constant473 --> PgFromExpression147 + Constant477{{"Constant[477∈0] ➊
ᐸ29ᐳ"}}:::plan + Constant477 --> PgFromExpression147 PgFromExpression151{{"PgFromExpression[151∈0] ➊"}}:::plan - Constant474{{"Constant[474∈0] ➊
ᐸ30ᐳ"}}:::plan - Constant474 --> PgFromExpression151 + Constant478{{"Constant[478∈0] ➊
ᐸ30ᐳ"}}:::plan + Constant478 --> PgFromExpression151 PgFromExpression155{{"PgFromExpression[155∈0] ➊"}}:::plan - Constant475{{"Constant[475∈0] ➊
ᐸ31ᐳ"}}:::plan - Constant475 --> PgFromExpression155 + Constant479{{"Constant[479∈0] ➊
ᐸ31ᐳ"}}:::plan + Constant479 --> PgFromExpression155 PgFromExpression159{{"PgFromExpression[159∈0] ➊"}}:::plan - Constant476{{"Constant[476∈0] ➊
ᐸ32ᐳ"}}:::plan - Constant476 --> PgFromExpression159 + Constant480{{"Constant[480∈0] ➊
ᐸ32ᐳ"}}:::plan + Constant480 --> PgFromExpression159 PgFromExpression163{{"PgFromExpression[163∈0] ➊"}}:::plan - Constant477{{"Constant[477∈0] ➊
ᐸ33ᐳ"}}:::plan - Constant477 --> PgFromExpression163 + Constant481{{"Constant[481∈0] ➊
ᐸ33ᐳ"}}:::plan + Constant481 --> PgFromExpression163 PgFromExpression167{{"PgFromExpression[167∈0] ➊"}}:::plan - Constant478{{"Constant[478∈0] ➊
ᐸ34ᐳ"}}:::plan - Constant478 --> PgFromExpression167 + Constant482{{"Constant[482∈0] ➊
ᐸ34ᐳ"}}:::plan + Constant482 --> PgFromExpression167 PgFromExpression171{{"PgFromExpression[171∈0] ➊"}}:::plan - Constant479{{"Constant[479∈0] ➊
ᐸ35ᐳ"}}:::plan - Constant479 --> PgFromExpression171 + Constant483{{"Constant[483∈0] ➊
ᐸ35ᐳ"}}:::plan + Constant483 --> PgFromExpression171 PgFromExpression175{{"PgFromExpression[175∈0] ➊"}}:::plan - Constant480{{"Constant[480∈0] ➊
ᐸ36ᐳ"}}:::plan - Constant480 --> PgFromExpression175 + Constant484{{"Constant[484∈0] ➊
ᐸ36ᐳ"}}:::plan + Constant484 --> PgFromExpression175 PgFromExpression179{{"PgFromExpression[179∈0] ➊"}}:::plan - Constant481{{"Constant[481∈0] ➊
ᐸ37ᐳ"}}:::plan - Constant481 --> PgFromExpression179 + Constant485{{"Constant[485∈0] ➊
ᐸ37ᐳ"}}:::plan + Constant485 --> PgFromExpression179 PgFromExpression183{{"PgFromExpression[183∈0] ➊"}}:::plan - Constant482{{"Constant[482∈0] ➊
ᐸ38ᐳ"}}:::plan - Constant482 --> PgFromExpression183 + Constant486{{"Constant[486∈0] ➊
ᐸ38ᐳ"}}:::plan + Constant486 --> PgFromExpression183 PgFromExpression187{{"PgFromExpression[187∈0] ➊"}}:::plan - Constant483{{"Constant[483∈0] ➊
ᐸ39ᐳ"}}:::plan - Constant483 --> PgFromExpression187 + Constant487{{"Constant[487∈0] ➊
ᐸ39ᐳ"}}:::plan + Constant487 --> PgFromExpression187 PgFromExpression191{{"PgFromExpression[191∈0] ➊"}}:::plan - Constant484{{"Constant[484∈0] ➊
ᐸ40ᐳ"}}:::plan - Constant484 --> PgFromExpression191 + Constant488{{"Constant[488∈0] ➊
ᐸ40ᐳ"}}:::plan + Constant488 --> PgFromExpression191 PgFromExpression195{{"PgFromExpression[195∈0] ➊"}}:::plan - Constant485{{"Constant[485∈0] ➊
ᐸ41ᐳ"}}:::plan - Constant485 --> PgFromExpression195 + Constant489{{"Constant[489∈0] ➊
ᐸ41ᐳ"}}:::plan + Constant489 --> PgFromExpression195 PgFromExpression199{{"PgFromExpression[199∈0] ➊"}}:::plan - Constant486{{"Constant[486∈0] ➊
ᐸ42ᐳ"}}:::plan - Constant486 --> PgFromExpression199 + Constant490{{"Constant[490∈0] ➊
ᐸ42ᐳ"}}:::plan + Constant490 --> PgFromExpression199 PgFromExpression203{{"PgFromExpression[203∈0] ➊"}}:::plan - Constant487{{"Constant[487∈0] ➊
ᐸ43ᐳ"}}:::plan - Constant487 --> PgFromExpression203 + Constant491{{"Constant[491∈0] ➊
ᐸ43ᐳ"}}:::plan + Constant491 --> PgFromExpression203 PgFromExpression207{{"PgFromExpression[207∈0] ➊"}}:::plan - Constant488{{"Constant[488∈0] ➊
ᐸ44ᐳ"}}:::plan - Constant488 --> PgFromExpression207 + Constant492{{"Constant[492∈0] ➊
ᐸ44ᐳ"}}:::plan + Constant492 --> PgFromExpression207 PgFromExpression211{{"PgFromExpression[211∈0] ➊"}}:::plan - Constant489{{"Constant[489∈0] ➊
ᐸ45ᐳ"}}:::plan - Constant489 --> PgFromExpression211 + Constant493{{"Constant[493∈0] ➊
ᐸ45ᐳ"}}:::plan + Constant493 --> PgFromExpression211 PgFromExpression215{{"PgFromExpression[215∈0] ➊"}}:::plan - Constant490{{"Constant[490∈0] ➊
ᐸ46ᐳ"}}:::plan - Constant490 --> PgFromExpression215 + Constant494{{"Constant[494∈0] ➊
ᐸ46ᐳ"}}:::plan + Constant494 --> PgFromExpression215 PgFromExpression219{{"PgFromExpression[219∈0] ➊"}}:::plan - Constant491{{"Constant[491∈0] ➊
ᐸ47ᐳ"}}:::plan - Constant491 --> PgFromExpression219 + Constant495{{"Constant[495∈0] ➊
ᐸ47ᐳ"}}:::plan + Constant495 --> PgFromExpression219 PgFromExpression223{{"PgFromExpression[223∈0] ➊"}}:::plan - Constant492{{"Constant[492∈0] ➊
ᐸ48ᐳ"}}:::plan - Constant492 --> PgFromExpression223 + Constant496{{"Constant[496∈0] ➊
ᐸ48ᐳ"}}:::plan + Constant496 --> PgFromExpression223 PgFromExpression227{{"PgFromExpression[227∈0] ➊"}}:::plan - Constant493{{"Constant[493∈0] ➊
ᐸ49ᐳ"}}:::plan - Constant493 --> PgFromExpression227 + Constant497{{"Constant[497∈0] ➊
ᐸ49ᐳ"}}:::plan + Constant497 --> PgFromExpression227 PgFromExpression231{{"PgFromExpression[231∈0] ➊"}}:::plan - Constant494{{"Constant[494∈0] ➊
ᐸ50ᐳ"}}:::plan - Constant494 --> PgFromExpression231 + Constant498{{"Constant[498∈0] ➊
ᐸ50ᐳ"}}:::plan + Constant498 --> PgFromExpression231 PgFromExpression235{{"PgFromExpression[235∈0] ➊"}}:::plan - Constant495{{"Constant[495∈0] ➊
ᐸ51ᐳ"}}:::plan - Constant495 --> PgFromExpression235 + Constant499{{"Constant[499∈0] ➊
ᐸ51ᐳ"}}:::plan + Constant499 --> PgFromExpression235 PgFromExpression239{{"PgFromExpression[239∈0] ➊"}}:::plan - Constant496{{"Constant[496∈0] ➊
ᐸ52ᐳ"}}:::plan - Constant496 --> PgFromExpression239 + Constant500{{"Constant[500∈0] ➊
ᐸ52ᐳ"}}:::plan + Constant500 --> PgFromExpression239 PgFromExpression243{{"PgFromExpression[243∈0] ➊"}}:::plan - Constant497{{"Constant[497∈0] ➊
ᐸ53ᐳ"}}:::plan - Constant497 --> PgFromExpression243 + Constant501{{"Constant[501∈0] ➊
ᐸ53ᐳ"}}:::plan + Constant501 --> PgFromExpression243 PgFromExpression247{{"PgFromExpression[247∈0] ➊"}}:::plan - Constant498{{"Constant[498∈0] ➊
ᐸ54ᐳ"}}:::plan - Constant498 --> PgFromExpression247 + Constant502{{"Constant[502∈0] ➊
ᐸ54ᐳ"}}:::plan + Constant502 --> PgFromExpression247 PgFromExpression251{{"PgFromExpression[251∈0] ➊"}}:::plan - Constant499{{"Constant[499∈0] ➊
ᐸ55ᐳ"}}:::plan - Constant499 --> PgFromExpression251 + Constant503{{"Constant[503∈0] ➊
ᐸ55ᐳ"}}:::plan + Constant503 --> PgFromExpression251 PgFromExpression255{{"PgFromExpression[255∈0] ➊"}}:::plan - Constant500{{"Constant[500∈0] ➊
ᐸ56ᐳ"}}:::plan - Constant500 --> PgFromExpression255 + Constant504{{"Constant[504∈0] ➊
ᐸ56ᐳ"}}:::plan + Constant504 --> PgFromExpression255 PgFromExpression259{{"PgFromExpression[259∈0] ➊"}}:::plan - Constant501{{"Constant[501∈0] ➊
ᐸ57ᐳ"}}:::plan - Constant501 --> PgFromExpression259 + Constant505{{"Constant[505∈0] ➊
ᐸ57ᐳ"}}:::plan + Constant505 --> PgFromExpression259 PgFromExpression263{{"PgFromExpression[263∈0] ➊"}}:::plan - Constant502{{"Constant[502∈0] ➊
ᐸ58ᐳ"}}:::plan - Constant502 --> PgFromExpression263 + Constant506{{"Constant[506∈0] ➊
ᐸ58ᐳ"}}:::plan + Constant506 --> PgFromExpression263 PgFromExpression267{{"PgFromExpression[267∈0] ➊"}}:::plan - Constant503{{"Constant[503∈0] ➊
ᐸ59ᐳ"}}:::plan - Constant503 --> PgFromExpression267 + Constant507{{"Constant[507∈0] ➊
ᐸ59ᐳ"}}:::plan + Constant507 --> PgFromExpression267 PgFromExpression271{{"PgFromExpression[271∈0] ➊"}}:::plan - Constant504{{"Constant[504∈0] ➊
ᐸ60ᐳ"}}:::plan - Constant504 --> PgFromExpression271 + Constant508{{"Constant[508∈0] ➊
ᐸ60ᐳ"}}:::plan + Constant508 --> PgFromExpression271 PgFromExpression275{{"PgFromExpression[275∈0] ➊"}}:::plan - Constant505{{"Constant[505∈0] ➊
ᐸ61ᐳ"}}:::plan - Constant505 --> PgFromExpression275 + Constant509{{"Constant[509∈0] ➊
ᐸ61ᐳ"}}:::plan + Constant509 --> PgFromExpression275 PgFromExpression279{{"PgFromExpression[279∈0] ➊"}}:::plan - Constant506{{"Constant[506∈0] ➊
ᐸ62ᐳ"}}:::plan - Constant506 --> PgFromExpression279 + Constant510{{"Constant[510∈0] ➊
ᐸ62ᐳ"}}:::plan + Constant510 --> PgFromExpression279 PgFromExpression283{{"PgFromExpression[283∈0] ➊"}}:::plan - Constant507{{"Constant[507∈0] ➊
ᐸ63ᐳ"}}:::plan - Constant507 --> PgFromExpression283 + Constant511{{"Constant[511∈0] ➊
ᐸ63ᐳ"}}:::plan + Constant511 --> PgFromExpression283 PgFromExpression287{{"PgFromExpression[287∈0] ➊"}}:::plan - Constant508{{"Constant[508∈0] ➊
ᐸ64ᐳ"}}:::plan - Constant508 --> PgFromExpression287 + Constant512{{"Constant[512∈0] ➊
ᐸ64ᐳ"}}:::plan + Constant512 --> PgFromExpression287 PgFromExpression291{{"PgFromExpression[291∈0] ➊"}}:::plan - Constant509{{"Constant[509∈0] ➊
ᐸ65ᐳ"}}:::plan - Constant509 --> PgFromExpression291 + Constant513{{"Constant[513∈0] ➊
ᐸ65ᐳ"}}:::plan + Constant513 --> PgFromExpression291 PgFromExpression295{{"PgFromExpression[295∈0] ➊"}}:::plan - Constant510{{"Constant[510∈0] ➊
ᐸ66ᐳ"}}:::plan - Constant510 --> PgFromExpression295 + Constant514{{"Constant[514∈0] ➊
ᐸ66ᐳ"}}:::plan + Constant514 --> PgFromExpression295 PgFromExpression299{{"PgFromExpression[299∈0] ➊"}}:::plan - Constant511{{"Constant[511∈0] ➊
ᐸ67ᐳ"}}:::plan - Constant511 --> PgFromExpression299 + Constant515{{"Constant[515∈0] ➊
ᐸ67ᐳ"}}:::plan + Constant515 --> PgFromExpression299 PgFromExpression303{{"PgFromExpression[303∈0] ➊"}}:::plan - Constant512{{"Constant[512∈0] ➊
ᐸ68ᐳ"}}:::plan - Constant512 --> PgFromExpression303 + Constant516{{"Constant[516∈0] ➊
ᐸ68ᐳ"}}:::plan + Constant516 --> PgFromExpression303 PgFromExpression307{{"PgFromExpression[307∈0] ➊"}}:::plan - Constant513{{"Constant[513∈0] ➊
ᐸ69ᐳ"}}:::plan - Constant513 --> PgFromExpression307 + Constant517{{"Constant[517∈0] ➊
ᐸ69ᐳ"}}:::plan + Constant517 --> PgFromExpression307 PgFromExpression311{{"PgFromExpression[311∈0] ➊"}}:::plan - Constant514{{"Constant[514∈0] ➊
ᐸ70ᐳ"}}:::plan - Constant514 --> PgFromExpression311 + Constant518{{"Constant[518∈0] ➊
ᐸ70ᐳ"}}:::plan + Constant518 --> PgFromExpression311 PgFromExpression315{{"PgFromExpression[315∈0] ➊"}}:::plan - Constant515{{"Constant[515∈0] ➊
ᐸ71ᐳ"}}:::plan - Constant515 --> PgFromExpression315 + Constant519{{"Constant[519∈0] ➊
ᐸ71ᐳ"}}:::plan + Constant519 --> PgFromExpression315 PgFromExpression319{{"PgFromExpression[319∈0] ➊"}}:::plan - Constant516{{"Constant[516∈0] ➊
ᐸ72ᐳ"}}:::plan - Constant516 --> PgFromExpression319 + Constant520{{"Constant[520∈0] ➊
ᐸ72ᐳ"}}:::plan + Constant520 --> PgFromExpression319 PgFromExpression323{{"PgFromExpression[323∈0] ➊"}}:::plan - Constant517{{"Constant[517∈0] ➊
ᐸ73ᐳ"}}:::plan - Constant517 --> PgFromExpression323 + Constant521{{"Constant[521∈0] ➊
ᐸ73ᐳ"}}:::plan + Constant521 --> PgFromExpression323 PgFromExpression327{{"PgFromExpression[327∈0] ➊"}}:::plan - Constant518{{"Constant[518∈0] ➊
ᐸ74ᐳ"}}:::plan - Constant518 --> PgFromExpression327 + Constant522{{"Constant[522∈0] ➊
ᐸ74ᐳ"}}:::plan + Constant522 --> PgFromExpression327 PgFromExpression331{{"PgFromExpression[331∈0] ➊"}}:::plan - Constant519{{"Constant[519∈0] ➊
ᐸ75ᐳ"}}:::plan - Constant519 --> PgFromExpression331 + Constant523{{"Constant[523∈0] ➊
ᐸ75ᐳ"}}:::plan + Constant523 --> PgFromExpression331 PgFromExpression335{{"PgFromExpression[335∈0] ➊"}}:::plan - Constant520{{"Constant[520∈0] ➊
ᐸ76ᐳ"}}:::plan - Constant520 --> PgFromExpression335 + Constant524{{"Constant[524∈0] ➊
ᐸ76ᐳ"}}:::plan + Constant524 --> PgFromExpression335 PgFromExpression339{{"PgFromExpression[339∈0] ➊"}}:::plan - Constant521{{"Constant[521∈0] ➊
ᐸ77ᐳ"}}:::plan - Constant521 --> PgFromExpression339 + Constant525{{"Constant[525∈0] ➊
ᐸ77ᐳ"}}:::plan + Constant525 --> PgFromExpression339 PgFromExpression343{{"PgFromExpression[343∈0] ➊"}}:::plan - Constant522{{"Constant[522∈0] ➊
ᐸ78ᐳ"}}:::plan - Constant522 --> PgFromExpression343 + Constant526{{"Constant[526∈0] ➊
ᐸ78ᐳ"}}:::plan + Constant526 --> PgFromExpression343 PgFromExpression347{{"PgFromExpression[347∈0] ➊"}}:::plan - Constant523{{"Constant[523∈0] ➊
ᐸ79ᐳ"}}:::plan - Constant523 --> PgFromExpression347 + Constant527{{"Constant[527∈0] ➊
ᐸ79ᐳ"}}:::plan + Constant527 --> PgFromExpression347 PgFromExpression351{{"PgFromExpression[351∈0] ➊"}}:::plan - Constant524{{"Constant[524∈0] ➊
ᐸ80ᐳ"}}:::plan - Constant524 --> PgFromExpression351 + Constant528{{"Constant[528∈0] ➊
ᐸ80ᐳ"}}:::plan + Constant528 --> PgFromExpression351 PgFromExpression355{{"PgFromExpression[355∈0] ➊"}}:::plan - Constant525{{"Constant[525∈0] ➊
ᐸ81ᐳ"}}:::plan - Constant525 --> PgFromExpression355 + Constant529{{"Constant[529∈0] ➊
ᐸ81ᐳ"}}:::plan + Constant529 --> PgFromExpression355 PgFromExpression359{{"PgFromExpression[359∈0] ➊"}}:::plan - Constant526{{"Constant[526∈0] ➊
ᐸ82ᐳ"}}:::plan - Constant526 --> PgFromExpression359 + Constant530{{"Constant[530∈0] ➊
ᐸ82ᐳ"}}:::plan + Constant530 --> PgFromExpression359 PgFromExpression363{{"PgFromExpression[363∈0] ➊"}}:::plan - Constant527{{"Constant[527∈0] ➊
ᐸ83ᐳ"}}:::plan - Constant527 --> PgFromExpression363 + Constant531{{"Constant[531∈0] ➊
ᐸ83ᐳ"}}:::plan + Constant531 --> PgFromExpression363 PgFromExpression367{{"PgFromExpression[367∈0] ➊"}}:::plan - Constant528{{"Constant[528∈0] ➊
ᐸ84ᐳ"}}:::plan - Constant528 --> PgFromExpression367 + Constant532{{"Constant[532∈0] ➊
ᐸ84ᐳ"}}:::plan + Constant532 --> PgFromExpression367 PgFromExpression371{{"PgFromExpression[371∈0] ➊"}}:::plan - Constant529{{"Constant[529∈0] ➊
ᐸ85ᐳ"}}:::plan - Constant529 --> PgFromExpression371 + Constant533{{"Constant[533∈0] ➊
ᐸ85ᐳ"}}:::plan + Constant533 --> PgFromExpression371 PgFromExpression375{{"PgFromExpression[375∈0] ➊"}}:::plan - Constant530{{"Constant[530∈0] ➊
ᐸ86ᐳ"}}:::plan - Constant530 --> PgFromExpression375 + Constant534{{"Constant[534∈0] ➊
ᐸ86ᐳ"}}:::plan + Constant534 --> PgFromExpression375 PgFromExpression379{{"PgFromExpression[379∈0] ➊"}}:::plan - Constant531{{"Constant[531∈0] ➊
ᐸ87ᐳ"}}:::plan - Constant531 --> PgFromExpression379 + Constant535{{"Constant[535∈0] ➊
ᐸ87ᐳ"}}:::plan + Constant535 --> PgFromExpression379 PgFromExpression383{{"PgFromExpression[383∈0] ➊"}}:::plan - Constant532{{"Constant[532∈0] ➊
ᐸ88ᐳ"}}:::plan - Constant532 --> PgFromExpression383 + Constant536{{"Constant[536∈0] ➊
ᐸ88ᐳ"}}:::plan + Constant536 --> PgFromExpression383 PgFromExpression387{{"PgFromExpression[387∈0] ➊"}}:::plan - Constant533{{"Constant[533∈0] ➊
ᐸ89ᐳ"}}:::plan - Constant533 --> PgFromExpression387 + Constant537{{"Constant[537∈0] ➊
ᐸ89ᐳ"}}:::plan + Constant537 --> PgFromExpression387 PgFromExpression391{{"PgFromExpression[391∈0] ➊"}}:::plan - Constant534{{"Constant[534∈0] ➊
ᐸ90ᐳ"}}:::plan - Constant534 --> PgFromExpression391 + Constant538{{"Constant[538∈0] ➊
ᐸ90ᐳ"}}:::plan + Constant538 --> PgFromExpression391 PgFromExpression395{{"PgFromExpression[395∈0] ➊"}}:::plan - Constant535{{"Constant[535∈0] ➊
ᐸ91ᐳ"}}:::plan - Constant535 --> PgFromExpression395 + Constant539{{"Constant[539∈0] ➊
ᐸ91ᐳ"}}:::plan + Constant539 --> PgFromExpression395 PgFromExpression399{{"PgFromExpression[399∈0] ➊"}}:::plan - Constant536{{"Constant[536∈0] ➊
ᐸ92ᐳ"}}:::plan - Constant536 --> PgFromExpression399 + Constant540{{"Constant[540∈0] ➊
ᐸ92ᐳ"}}:::plan + Constant540 --> PgFromExpression399 PgFromExpression403{{"PgFromExpression[403∈0] ➊"}}:::plan - Constant537{{"Constant[537∈0] ➊
ᐸ93ᐳ"}}:::plan - Constant537 --> PgFromExpression403 + Constant541{{"Constant[541∈0] ➊
ᐸ93ᐳ"}}:::plan + Constant541 --> PgFromExpression403 PgFromExpression407{{"PgFromExpression[407∈0] ➊"}}:::plan - Constant538{{"Constant[538∈0] ➊
ᐸ94ᐳ"}}:::plan - Constant538 --> PgFromExpression407 + Constant542{{"Constant[542∈0] ➊
ᐸ94ᐳ"}}:::plan + Constant542 --> PgFromExpression407 PgFromExpression411{{"PgFromExpression[411∈0] ➊"}}:::plan - Constant539{{"Constant[539∈0] ➊
ᐸ95ᐳ"}}:::plan - Constant539 --> PgFromExpression411 + Constant543{{"Constant[543∈0] ➊
ᐸ95ᐳ"}}:::plan + Constant543 --> PgFromExpression411 PgFromExpression415{{"PgFromExpression[415∈0] ➊"}}:::plan - Constant540{{"Constant[540∈0] ➊
ᐸ96ᐳ"}}:::plan - Constant540 --> PgFromExpression415 + Constant544{{"Constant[544∈0] ➊
ᐸ96ᐳ"}}:::plan + Constant544 --> PgFromExpression415 PgFromExpression419{{"PgFromExpression[419∈0] ➊"}}:::plan - Constant541{{"Constant[541∈0] ➊
ᐸ97ᐳ"}}:::plan - Constant541 --> PgFromExpression419 + Constant545{{"Constant[545∈0] ➊
ᐸ97ᐳ"}}:::plan + Constant545 --> PgFromExpression419 PgFromExpression423{{"PgFromExpression[423∈0] ➊"}}:::plan - Constant542{{"Constant[542∈0] ➊
ᐸ98ᐳ"}}:::plan - Constant542 --> PgFromExpression423 + Constant546{{"Constant[546∈0] ➊
ᐸ98ᐳ"}}:::plan + Constant546 --> PgFromExpression423 PgFromExpression427{{"PgFromExpression[427∈0] ➊"}}:::plan - Constant543{{"Constant[543∈0] ➊
ᐸ99ᐳ"}}:::plan - Constant543 --> PgFromExpression427 + Constant547{{"Constant[547∈0] ➊
ᐸ99ᐳ"}}:::plan + Constant547 --> PgFromExpression427 PgFromExpression431{{"PgFromExpression[431∈0] ➊"}}:::plan - Constant544{{"Constant[544∈0] ➊
ᐸ100ᐳ"}}:::plan - Constant544 --> PgFromExpression431 + Constant548{{"Constant[548∈0] ➊
ᐸ100ᐳ"}}:::plan + Constant548 --> PgFromExpression431 PgFromExpression435{{"PgFromExpression[435∈0] ➊"}}:::plan - Constant545{{"Constant[545∈0] ➊
ᐸ101ᐳ"}}:::plan - Constant545 --> PgFromExpression435 + Constant549{{"Constant[549∈0] ➊
ᐸ101ᐳ"}}:::plan + Constant549 --> PgFromExpression435 PgFromExpression439{{"PgFromExpression[439∈0] ➊"}}:::plan - Constant546{{"Constant[546∈0] ➊
ᐸ102ᐳ"}}:::plan - Constant546 --> PgFromExpression439 + Constant550{{"Constant[550∈0] ➊
ᐸ102ᐳ"}}:::plan + Constant550 --> PgFromExpression439 PgFromExpression443{{"PgFromExpression[443∈0] ➊"}}:::plan - Constant547{{"Constant[547∈0] ➊
ᐸ103ᐳ"}}:::plan - Constant547 --> PgFromExpression443 + Constant551{{"Constant[551∈0] ➊
ᐸ103ᐳ"}}:::plan + Constant551 --> PgFromExpression443 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access10 __Value2 --> Access11 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan PgSelect15[["PgSelect[15∈1] ➊
ᐸpersonᐳ"]]:::plan - Object12 & Connection13 & Constant445 --> PgSelect15 + PgSelectInlineApply445["PgSelectInlineApply[445∈1] ➊"]:::plan + Object12 & Connection13 & Constant449 & PgFromExpression35 & PgFromExpression39 & PgFromExpression43 & PgFromExpression47 & PgFromExpression51 & PgFromExpression55 & PgFromExpression59 & PgFromExpression63 & PgFromExpression67 & PgFromExpression71 & PgFromExpression75 & PgFromExpression79 & PgFromExpression83 & PgFromExpression87 & PgFromExpression91 & PgFromExpression95 & PgFromExpression99 & PgFromExpression103 & PgFromExpression107 & PgFromExpression111 & PgFromExpression115 & PgFromExpression119 & PgFromExpression123 & PgFromExpression127 & PgFromExpression131 & PgFromExpression135 & PgFromExpression139 & PgFromExpression143 & PgFromExpression147 & PgFromExpression151 & PgFromExpression155 & PgFromExpression159 & PgFromExpression163 & PgFromExpression167 & PgFromExpression171 & PgFromExpression175 & PgFromExpression179 & PgFromExpression183 & PgFromExpression187 & PgFromExpression191 & PgFromExpression195 & PgFromExpression199 & PgFromExpression203 & PgFromExpression207 & PgFromExpression211 & PgFromExpression215 & PgFromExpression219 & PgFromExpression223 & PgFromExpression227 & PgFromExpression231 & PgFromExpression235 & PgFromExpression239 & PgFromExpression243 & PgFromExpression247 & PgFromExpression251 & PgFromExpression255 & PgFromExpression259 & PgFromExpression263 & PgFromExpression267 & PgFromExpression271 & PgFromExpression275 & PgFromExpression279 & PgFromExpression283 & PgFromExpression287 & PgFromExpression291 & PgFromExpression295 & PgFromExpression299 & PgFromExpression303 & PgFromExpression307 & PgFromExpression311 & PgFromExpression315 & PgFromExpression319 & PgFromExpression323 & PgFromExpression327 & PgFromExpression331 & PgFromExpression335 & PgFromExpression339 & PgFromExpression343 & PgFromExpression347 & PgFromExpression351 & PgFromExpression355 & PgFromExpression359 & PgFromExpression363 & PgFromExpression367 & PgFromExpression371 & PgFromExpression375 & PgFromExpression379 & PgFromExpression383 & PgFromExpression387 & PgFromExpression391 & PgFromExpression395 & PgFromExpression399 & PgFromExpression403 & PgFromExpression407 & PgFromExpression411 & PgFromExpression415 & PgFromExpression419 & PgFromExpression423 & PgFromExpression427 & PgFromExpression431 & PgFromExpression435 & PgFromExpression439 & PgFromExpression443 & PgSelectInlineApply445 --> PgSelect15 + Constant449 --> PgSelectInlineApply445 PgSelectRows16[["PgSelectRows[16∈1] ➊"]]:::plan PgSelect15 --> PgSelectRows16 __Item17[/"__Item[17∈2]
ᐸ16ᐳ"\]:::itemplan PgSelectRows16 ==> __Item17 PgSelectSingle18{{"PgSelectSingle[18∈2]
ᐸpersonᐳ"}}:::plan __Item17 --> PgSelectSingle18 - PgSelect28[["PgSelect[28∈3]
ᐸpostᐳ"]]:::plan + List447{{"List[447∈3]
ᐸ17,446ᐳ"}}:::plan + Access446{{"Access[446∈3] ➊
ᐸ15.m.subqueryDetailsFor28ᐳ"}}:::plan + __Item17 & Access446 --> List447 PgClassExpression19{{"PgClassExpression[19∈3]
ᐸ__person__.”id”ᐳ"}}:::plan - Object12 & PgClassExpression19 & Connection26 & Constant445 & PgFromExpression35 & PgFromExpression39 & PgFromExpression43 & PgFromExpression47 & PgFromExpression51 & PgFromExpression55 & PgFromExpression59 & PgFromExpression63 & PgFromExpression67 & PgFromExpression71 & PgFromExpression75 & PgFromExpression79 & PgFromExpression83 & PgFromExpression87 & PgFromExpression91 & PgFromExpression95 & PgFromExpression99 & PgFromExpression103 & PgFromExpression107 & PgFromExpression111 & PgFromExpression115 & PgFromExpression119 & PgFromExpression123 & PgFromExpression127 & PgFromExpression131 & PgFromExpression135 & PgFromExpression139 & PgFromExpression143 & PgFromExpression147 & PgFromExpression151 & PgFromExpression155 & PgFromExpression159 & PgFromExpression163 & PgFromExpression167 & PgFromExpression171 & PgFromExpression175 & PgFromExpression179 & PgFromExpression183 & PgFromExpression187 & PgFromExpression191 & PgFromExpression195 & PgFromExpression199 & PgFromExpression203 & PgFromExpression207 & PgFromExpression211 & PgFromExpression215 & PgFromExpression219 & PgFromExpression223 & PgFromExpression227 & PgFromExpression231 & PgFromExpression235 & PgFromExpression239 & PgFromExpression243 & PgFromExpression247 & PgFromExpression251 & PgFromExpression255 & PgFromExpression259 & PgFromExpression263 & PgFromExpression267 & PgFromExpression271 & PgFromExpression275 & PgFromExpression279 & PgFromExpression283 & PgFromExpression287 & PgFromExpression291 & PgFromExpression295 & PgFromExpression299 & PgFromExpression303 & PgFromExpression307 & PgFromExpression311 & PgFromExpression315 & PgFromExpression319 & PgFromExpression323 & PgFromExpression327 & PgFromExpression331 & PgFromExpression335 & PgFromExpression339 & PgFromExpression343 & PgFromExpression347 & PgFromExpression351 & PgFromExpression355 & PgFromExpression359 & PgFromExpression363 & PgFromExpression367 & PgFromExpression371 & PgFromExpression375 & PgFromExpression379 & PgFromExpression383 & PgFromExpression387 & PgFromExpression391 & PgFromExpression395 & PgFromExpression399 & PgFromExpression403 & PgFromExpression407 & PgFromExpression411 & PgFromExpression415 & PgFromExpression419 & PgFromExpression423 & PgFromExpression427 & PgFromExpression431 & PgFromExpression435 & PgFromExpression439 & PgFromExpression443 --> PgSelect28 PgSelectSingle18 --> PgClassExpression19 PgSelectRows29[["PgSelectRows[29∈3]"]]:::plan - PgSelect28 --> PgSelectRows29 + Lambda448{{"Lambda[448∈3]"}}:::plan + Lambda448 --> PgSelectRows29 + PgSelect15 --> Access446 + List447 --> Lambda448 __Item30[/"__Item[30∈4]
ᐸ29ᐳ"\]:::itemplan PgSelectRows29 ==> __Item30 PgSelectSingle31{{"PgSelectSingle[31∈4]
ᐸpostᐳ"}}:::plan @@ -562,16 +568,16 @@ graph TD subgraph "Buckets for queries/v4/json-overflow-nested" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Access10,Access11,Object12,Connection13,Connection26,PgFromExpression35,PgFromExpression39,PgFromExpression43,PgFromExpression47,PgFromExpression51,PgFromExpression55,PgFromExpression59,PgFromExpression63,PgFromExpression67,PgFromExpression71,PgFromExpression75,PgFromExpression79,PgFromExpression83,PgFromExpression87,PgFromExpression91,PgFromExpression95,PgFromExpression99,PgFromExpression103,PgFromExpression107,PgFromExpression111,PgFromExpression115,PgFromExpression119,PgFromExpression123,PgFromExpression127,PgFromExpression131,PgFromExpression135,PgFromExpression139,PgFromExpression143,PgFromExpression147,PgFromExpression151,PgFromExpression155,PgFromExpression159,PgFromExpression163,PgFromExpression167,PgFromExpression171,PgFromExpression175,PgFromExpression179,PgFromExpression183,PgFromExpression187,PgFromExpression191,PgFromExpression195,PgFromExpression199,PgFromExpression203,PgFromExpression207,PgFromExpression211,PgFromExpression215,PgFromExpression219,PgFromExpression223,PgFromExpression227,PgFromExpression231,PgFromExpression235,PgFromExpression239,PgFromExpression243,PgFromExpression247,PgFromExpression251,PgFromExpression255,PgFromExpression259,PgFromExpression263,PgFromExpression267,PgFromExpression271,PgFromExpression275,PgFromExpression279,PgFromExpression283,PgFromExpression287,PgFromExpression291,PgFromExpression295,PgFromExpression299,PgFromExpression303,PgFromExpression307,PgFromExpression311,PgFromExpression315,PgFromExpression319,PgFromExpression323,PgFromExpression327,PgFromExpression331,PgFromExpression335,PgFromExpression339,PgFromExpression343,PgFromExpression347,PgFromExpression351,PgFromExpression355,PgFromExpression359,PgFromExpression363,PgFromExpression367,PgFromExpression371,PgFromExpression375,PgFromExpression379,PgFromExpression383,PgFromExpression387,PgFromExpression391,PgFromExpression395,PgFromExpression399,PgFromExpression403,PgFromExpression407,PgFromExpression411,PgFromExpression415,PgFromExpression419,PgFromExpression423,PgFromExpression427,PgFromExpression431,PgFromExpression435,PgFromExpression439,PgFromExpression443,Constant445,Constant446,Constant447,Constant448,Constant449,Constant450,Constant451,Constant452,Constant453,Constant454,Constant455,Constant456,Constant457,Constant458,Constant459,Constant460,Constant461,Constant462,Constant463,Constant464,Constant465,Constant466,Constant467,Constant468,Constant469,Constant470,Constant471,Constant472,Constant473,Constant474,Constant475,Constant476,Constant477,Constant478,Constant479,Constant480,Constant481,Constant482,Constant483,Constant484,Constant485,Constant486,Constant487,Constant488,Constant489,Constant490,Constant491,Constant492,Constant493,Constant494,Constant495,Constant496,Constant497,Constant498,Constant499,Constant500,Constant501,Constant502,Constant503,Constant504,Constant505,Constant506,Constant507,Constant508,Constant509,Constant510,Constant511,Constant512,Constant513,Constant514,Constant515,Constant516,Constant517,Constant518,Constant519,Constant520,Constant521,Constant522,Constant523,Constant524,Constant525,Constant526,Constant527,Constant528,Constant529,Constant530,Constant531,Constant532,Constant533,Constant534,Constant535,Constant536,Constant537,Constant538,Constant539,Constant540,Constant541,Constant542,Constant543,Constant544,Constant545,Constant546,Constant547 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 12, 13, 445, 7, 26, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255, 259, 263, 267, 271, 275, 279, 283, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 371, 375, 379, 383, 387, 391, 395, 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, 439, 443

ROOT Connectionᐸ9ᐳ[13]
1: PgSelect[15]
2: PgSelectRows[16]"):::bucket + class Bucket0,__Value2,__Value4,Access10,Access11,Object12,Connection13,Connection26,PgFromExpression35,PgFromExpression39,PgFromExpression43,PgFromExpression47,PgFromExpression51,PgFromExpression55,PgFromExpression59,PgFromExpression63,PgFromExpression67,PgFromExpression71,PgFromExpression75,PgFromExpression79,PgFromExpression83,PgFromExpression87,PgFromExpression91,PgFromExpression95,PgFromExpression99,PgFromExpression103,PgFromExpression107,PgFromExpression111,PgFromExpression115,PgFromExpression119,PgFromExpression123,PgFromExpression127,PgFromExpression131,PgFromExpression135,PgFromExpression139,PgFromExpression143,PgFromExpression147,PgFromExpression151,PgFromExpression155,PgFromExpression159,PgFromExpression163,PgFromExpression167,PgFromExpression171,PgFromExpression175,PgFromExpression179,PgFromExpression183,PgFromExpression187,PgFromExpression191,PgFromExpression195,PgFromExpression199,PgFromExpression203,PgFromExpression207,PgFromExpression211,PgFromExpression215,PgFromExpression219,PgFromExpression223,PgFromExpression227,PgFromExpression231,PgFromExpression235,PgFromExpression239,PgFromExpression243,PgFromExpression247,PgFromExpression251,PgFromExpression255,PgFromExpression259,PgFromExpression263,PgFromExpression267,PgFromExpression271,PgFromExpression275,PgFromExpression279,PgFromExpression283,PgFromExpression287,PgFromExpression291,PgFromExpression295,PgFromExpression299,PgFromExpression303,PgFromExpression307,PgFromExpression311,PgFromExpression315,PgFromExpression319,PgFromExpression323,PgFromExpression327,PgFromExpression331,PgFromExpression335,PgFromExpression339,PgFromExpression343,PgFromExpression347,PgFromExpression351,PgFromExpression355,PgFromExpression359,PgFromExpression363,PgFromExpression367,PgFromExpression371,PgFromExpression375,PgFromExpression379,PgFromExpression383,PgFromExpression387,PgFromExpression391,PgFromExpression395,PgFromExpression399,PgFromExpression403,PgFromExpression407,PgFromExpression411,PgFromExpression415,PgFromExpression419,PgFromExpression423,PgFromExpression427,PgFromExpression431,PgFromExpression435,PgFromExpression439,PgFromExpression443,Constant449,Constant450,Constant451,Constant452,Constant453,Constant454,Constant455,Constant456,Constant457,Constant458,Constant459,Constant460,Constant461,Constant462,Constant463,Constant464,Constant465,Constant466,Constant467,Constant468,Constant469,Constant470,Constant471,Constant472,Constant473,Constant474,Constant475,Constant476,Constant477,Constant478,Constant479,Constant480,Constant481,Constant482,Constant483,Constant484,Constant485,Constant486,Constant487,Constant488,Constant489,Constant490,Constant491,Constant492,Constant493,Constant494,Constant495,Constant496,Constant497,Constant498,Constant499,Constant500,Constant501,Constant502,Constant503,Constant504,Constant505,Constant506,Constant507,Constant508,Constant509,Constant510,Constant511,Constant512,Constant513,Constant514,Constant515,Constant516,Constant517,Constant518,Constant519,Constant520,Constant521,Constant522,Constant523,Constant524,Constant525,Constant526,Constant527,Constant528,Constant529,Constant530,Constant531,Constant532,Constant533,Constant534,Constant535,Constant536,Constant537,Constant538,Constant539,Constant540,Constant541,Constant542,Constant543,Constant544,Constant545,Constant546,Constant547,Constant548,Constant549,Constant550,Constant551 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 12, 13, 449, 7, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255, 259, 263, 267, 271, 275, 279, 283, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 371, 375, 379, 383, 387, 391, 395, 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, 439, 443, 26

ROOT Connectionᐸ9ᐳ[13]
1: PgSelectInlineApply[445]
2: PgSelect[15]
3: PgSelectRows[16]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect15,PgSelectRows16 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 12, 26, 445, 7, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255, 259, 263, 267, 271, 275, 279, 283, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 371, 375, 379, 383, 387, 391, 395, 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, 439, 443

ROOT __Item{2}ᐸ16ᐳ[17]"):::bucket + class Bucket1,PgSelect15,PgSelectRows16,PgSelectInlineApply445 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 15, 26

ROOT __Item{2}ᐸ16ᐳ[17]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item17,PgSelectSingle18 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 18, 12, 26, 445, 7, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 255, 259, 263, 267, 271, 275, 279, 283, 287, 291, 295, 299, 303, 307, 311, 315, 319, 323, 327, 331, 335, 339, 343, 347, 351, 355, 359, 363, 367, 371, 375, 379, 383, 387, 391, 395, 399, 403, 407, 411, 415, 419, 423, 427, 431, 435, 439, 443

ROOT PgSelectSingle{2}ᐸpersonᐳ[18]
1:
ᐳ: PgClassExpression[19]
2: PgSelect[28]
3: PgSelectRows[29]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 18, 15, 17, 26

ROOT PgSelectSingle{2}ᐸpersonᐳ[18]
1:
ᐳ: 19, 446, 447, 448
2: PgSelectRows[29]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression19,PgSelect28,PgSelectRows29 bucket3 + class Bucket3,PgClassExpression19,PgSelectRows29,Access446,List447,Lambda448 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ29ᐳ[30]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item30,PgSelectSingle31 bucket4 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.sql b/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.sql index b162fe5e5d..2d9ce86e39 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/json-overflow-nested.sql @@ -1,426 +1,428 @@ select - __person__."id"::text as "0" + __person__."id"::text as "0", + array( + select array[ + __post__."headline", + "a"."post_headline_trimmed"( + __post__, + $1::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $2::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $3::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $4::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $5::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $6::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $7::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $8::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $9::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $10::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $11::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $12::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $13::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $14::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $15::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $16::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $17::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $18::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $19::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $20::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $21::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $22::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $23::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $24::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $25::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $26::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $27::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $28::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $29::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $30::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $31::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $32::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $33::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $34::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $35::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $36::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $37::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $38::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $39::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $40::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $41::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $42::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $43::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $44::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $45::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $46::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $47::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $48::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $49::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $50::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $51::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $52::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $53::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $54::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $55::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $56::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $57::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $58::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $59::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $60::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $61::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $62::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $63::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $64::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $65::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $66::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $67::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $68::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $69::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $70::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $71::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $72::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $73::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $74::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $75::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $76::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $77::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $78::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $79::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $80::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $81::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $82::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $83::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $84::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $85::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $86::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $87::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $88::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $89::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $90::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $91::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $92::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $93::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $94::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $95::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $96::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $97::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $98::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $99::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $100::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $101::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $102::"int4" + ), + "a"."post_headline_trimmed"( + __post__, + $103::"int4" + ) + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" + ) + order by __post__."id" asc + limit 1 + )::text as "1" from "c"."person" as __person__ order by __person__."id" asc -limit 1; - -select - __post__."headline" as "0", - "a"."post_headline_trimmed"( - __post__, - $1::"int4" - ) as "1", - "a"."post_headline_trimmed"( - __post__, - $2::"int4" - ) as "2", - "a"."post_headline_trimmed"( - __post__, - $3::"int4" - ) as "3", - "a"."post_headline_trimmed"( - __post__, - $4::"int4" - ) as "4", - "a"."post_headline_trimmed"( - __post__, - $5::"int4" - ) as "5", - "a"."post_headline_trimmed"( - __post__, - $6::"int4" - ) as "6", - "a"."post_headline_trimmed"( - __post__, - $7::"int4" - ) as "7", - "a"."post_headline_trimmed"( - __post__, - $8::"int4" - ) as "8", - "a"."post_headline_trimmed"( - __post__, - $9::"int4" - ) as "9", - "a"."post_headline_trimmed"( - __post__, - $10::"int4" - ) as "10", - "a"."post_headline_trimmed"( - __post__, - $11::"int4" - ) as "11", - "a"."post_headline_trimmed"( - __post__, - $12::"int4" - ) as "12", - "a"."post_headline_trimmed"( - __post__, - $13::"int4" - ) as "13", - "a"."post_headline_trimmed"( - __post__, - $14::"int4" - ) as "14", - "a"."post_headline_trimmed"( - __post__, - $15::"int4" - ) as "15", - "a"."post_headline_trimmed"( - __post__, - $16::"int4" - ) as "16", - "a"."post_headline_trimmed"( - __post__, - $17::"int4" - ) as "17", - "a"."post_headline_trimmed"( - __post__, - $18::"int4" - ) as "18", - "a"."post_headline_trimmed"( - __post__, - $19::"int4" - ) as "19", - "a"."post_headline_trimmed"( - __post__, - $20::"int4" - ) as "20", - "a"."post_headline_trimmed"( - __post__, - $21::"int4" - ) as "21", - "a"."post_headline_trimmed"( - __post__, - $22::"int4" - ) as "22", - "a"."post_headline_trimmed"( - __post__, - $23::"int4" - ) as "23", - "a"."post_headline_trimmed"( - __post__, - $24::"int4" - ) as "24", - "a"."post_headline_trimmed"( - __post__, - $25::"int4" - ) as "25", - "a"."post_headline_trimmed"( - __post__, - $26::"int4" - ) as "26", - "a"."post_headline_trimmed"( - __post__, - $27::"int4" - ) as "27", - "a"."post_headline_trimmed"( - __post__, - $28::"int4" - ) as "28", - "a"."post_headline_trimmed"( - __post__, - $29::"int4" - ) as "29", - "a"."post_headline_trimmed"( - __post__, - $30::"int4" - ) as "30", - "a"."post_headline_trimmed"( - __post__, - $31::"int4" - ) as "31", - "a"."post_headline_trimmed"( - __post__, - $32::"int4" - ) as "32", - "a"."post_headline_trimmed"( - __post__, - $33::"int4" - ) as "33", - "a"."post_headline_trimmed"( - __post__, - $34::"int4" - ) as "34", - "a"."post_headline_trimmed"( - __post__, - $35::"int4" - ) as "35", - "a"."post_headline_trimmed"( - __post__, - $36::"int4" - ) as "36", - "a"."post_headline_trimmed"( - __post__, - $37::"int4" - ) as "37", - "a"."post_headline_trimmed"( - __post__, - $38::"int4" - ) as "38", - "a"."post_headline_trimmed"( - __post__, - $39::"int4" - ) as "39", - "a"."post_headline_trimmed"( - __post__, - $40::"int4" - ) as "40", - "a"."post_headline_trimmed"( - __post__, - $41::"int4" - ) as "41", - "a"."post_headline_trimmed"( - __post__, - $42::"int4" - ) as "42", - "a"."post_headline_trimmed"( - __post__, - $43::"int4" - ) as "43", - "a"."post_headline_trimmed"( - __post__, - $44::"int4" - ) as "44", - "a"."post_headline_trimmed"( - __post__, - $45::"int4" - ) as "45", - "a"."post_headline_trimmed"( - __post__, - $46::"int4" - ) as "46", - "a"."post_headline_trimmed"( - __post__, - $47::"int4" - ) as "47", - "a"."post_headline_trimmed"( - __post__, - $48::"int4" - ) as "48", - "a"."post_headline_trimmed"( - __post__, - $49::"int4" - ) as "49", - "a"."post_headline_trimmed"( - __post__, - $50::"int4" - ) as "50", - "a"."post_headline_trimmed"( - __post__, - $51::"int4" - ) as "51", - "a"."post_headline_trimmed"( - __post__, - $52::"int4" - ) as "52", - "a"."post_headline_trimmed"( - __post__, - $53::"int4" - ) as "53", - "a"."post_headline_trimmed"( - __post__, - $54::"int4" - ) as "54", - "a"."post_headline_trimmed"( - __post__, - $55::"int4" - ) as "55", - "a"."post_headline_trimmed"( - __post__, - $56::"int4" - ) as "56", - "a"."post_headline_trimmed"( - __post__, - $57::"int4" - ) as "57", - "a"."post_headline_trimmed"( - __post__, - $58::"int4" - ) as "58", - "a"."post_headline_trimmed"( - __post__, - $59::"int4" - ) as "59", - "a"."post_headline_trimmed"( - __post__, - $60::"int4" - ) as "60", - "a"."post_headline_trimmed"( - __post__, - $61::"int4" - ) as "61", - "a"."post_headline_trimmed"( - __post__, - $62::"int4" - ) as "62", - "a"."post_headline_trimmed"( - __post__, - $63::"int4" - ) as "63", - "a"."post_headline_trimmed"( - __post__, - $64::"int4" - ) as "64", - "a"."post_headline_trimmed"( - __post__, - $65::"int4" - ) as "65", - "a"."post_headline_trimmed"( - __post__, - $66::"int4" - ) as "66", - "a"."post_headline_trimmed"( - __post__, - $67::"int4" - ) as "67", - "a"."post_headline_trimmed"( - __post__, - $68::"int4" - ) as "68", - "a"."post_headline_trimmed"( - __post__, - $69::"int4" - ) as "69", - "a"."post_headline_trimmed"( - __post__, - $70::"int4" - ) as "70", - "a"."post_headline_trimmed"( - __post__, - $71::"int4" - ) as "71", - "a"."post_headline_trimmed"( - __post__, - $72::"int4" - ) as "72", - "a"."post_headline_trimmed"( - __post__, - $73::"int4" - ) as "73", - "a"."post_headline_trimmed"( - __post__, - $74::"int4" - ) as "74", - "a"."post_headline_trimmed"( - __post__, - $75::"int4" - ) as "75", - "a"."post_headline_trimmed"( - __post__, - $76::"int4" - ) as "76", - "a"."post_headline_trimmed"( - __post__, - $77::"int4" - ) as "77", - "a"."post_headline_trimmed"( - __post__, - $78::"int4" - ) as "78", - "a"."post_headline_trimmed"( - __post__, - $79::"int4" - ) as "79", - "a"."post_headline_trimmed"( - __post__, - $80::"int4" - ) as "80", - "a"."post_headline_trimmed"( - __post__, - $81::"int4" - ) as "81", - "a"."post_headline_trimmed"( - __post__, - $82::"int4" - ) as "82", - "a"."post_headline_trimmed"( - __post__, - $83::"int4" - ) as "83", - "a"."post_headline_trimmed"( - __post__, - $84::"int4" - ) as "84", - "a"."post_headline_trimmed"( - __post__, - $85::"int4" - ) as "85", - "a"."post_headline_trimmed"( - __post__, - $86::"int4" - ) as "86", - "a"."post_headline_trimmed"( - __post__, - $87::"int4" - ) as "87", - "a"."post_headline_trimmed"( - __post__, - $88::"int4" - ) as "88", - "a"."post_headline_trimmed"( - __post__, - $89::"int4" - ) as "89", - "a"."post_headline_trimmed"( - __post__, - $90::"int4" - ) as "90", - "a"."post_headline_trimmed"( - __post__, - $91::"int4" - ) as "91", - "a"."post_headline_trimmed"( - __post__, - $92::"int4" - ) as "92", - "a"."post_headline_trimmed"( - __post__, - $93::"int4" - ) as "93", - "a"."post_headline_trimmed"( - __post__, - $94::"int4" - ) as "94", - "a"."post_headline_trimmed"( - __post__, - $95::"int4" - ) as "95", - "a"."post_headline_trimmed"( - __post__, - $96::"int4" - ) as "96", - "a"."post_headline_trimmed"( - __post__, - $97::"int4" - ) as "97", - "a"."post_headline_trimmed"( - __post__, - $98::"int4" - ) as "98", - "a"."post_headline_trimmed"( - __post__, - $99::"int4" - ) as "99", - "a"."post_headline_trimmed"( - __post__, - $100::"int4" - ) as "100", - "a"."post_headline_trimmed"( - __post__, - $101::"int4" - ) as "101", - "a"."post_headline_trimmed"( - __post__, - $102::"int4" - ) as "102", - "a"."post_headline_trimmed"( - __post__, - $103::"int4" - ) as "103" -from "a"."post" as __post__ -where ( - __post__."author_id" = $104::"int4" -) -order by __post__."id" asc limit 1; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.mermaid index 363804146e..b9c26a1cb2 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.mermaid @@ -10,59 +10,59 @@ graph TD %% plan dependencies __InputObject145{{"__InputObject[145∈0] ➊"}}:::plan - Constant359{{"Constant[359∈0] ➊
ᐸ419ᐳ"}}:::plan - Constant360{{"Constant[360∈0] ➊
ᐸ'easy cheesy baked potatoes'ᐳ"}}:::plan - Constant361{{"Constant[361∈0] ➊
ᐸ'red'ᐳ"}}:::plan - Constant362{{"Constant[362∈0] ➊
ᐸ'BAR_FOO'ᐳ"}}:::plan - Constant363{{"Constant[363∈0] ➊
ᐸ''ᐳ"}}:::plan + Constant371{{"Constant[371∈0] ➊
ᐸ419ᐳ"}}:::plan + Constant372{{"Constant[372∈0] ➊
ᐸ'easy cheesy baked potatoes'ᐳ"}}:::plan + Constant373{{"Constant[373∈0] ➊
ᐸ'red'ᐳ"}}:::plan + Constant374{{"Constant[374∈0] ➊
ᐸ'BAR_FOO'ᐳ"}}:::plan + Constant375{{"Constant[375∈0] ➊
ᐸ''ᐳ"}}:::plan __InputObject151{{"__InputObject[151∈0] ➊"}}:::plan - Constant365{{"Constant[365∈0] ➊
ᐸ8ᐳ"}}:::plan - Constant359 & Constant360 & Constant361 & Constant362 & Constant363 & __InputObject151 & Constant365 --> __InputObject145 + Constant377{{"Constant[377∈0] ➊
ᐸ8ᐳ"}}:::plan + Constant371 & Constant372 & Constant373 & Constant374 & Constant375 & __InputObject151 & Constant377 --> __InputObject145 PgSelect282[["PgSelect[282∈0] ➊
ᐸpersonᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Constant366{{"Constant[366∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant378{{"Constant[378∈0] ➊
ᐸ1ᐳ"}}:::plan PgFromExpression290{{"PgFromExpression[290∈0] ➊"}}:::plan PgFromExpression296{{"PgFromExpression[296∈0] ➊"}}:::plan PgFromExpression301{{"PgFromExpression[301∈0] ➊"}}:::plan PgFromExpression306{{"PgFromExpression[306∈0] ➊"}}:::plan PgFromExpression311{{"PgFromExpression[311∈0] ➊"}}:::plan PgFromExpression316{{"PgFromExpression[316∈0] ➊"}}:::plan - Object11 & Constant366 & PgFromExpression290 & PgFromExpression296 & PgFromExpression301 & PgFromExpression306 & PgFromExpression311 & PgFromExpression316 --> PgSelect282 + Object11 & Constant378 & PgFromExpression290 & PgFromExpression296 & PgFromExpression301 & PgFromExpression306 & PgFromExpression311 & PgFromExpression316 --> PgSelect282 Connection12{{"Connection[12∈0] ➊
ᐸ8ᐳ"}}:::plan Connection105{{"Connection[105∈0] ➊
ᐸ103ᐳ"}}:::plan Connection191{{"Connection[191∈0] ➊
ᐸ188ᐳ"}}:::plan Connection221{{"Connection[221∈0] ➊
ᐸ219ᐳ"}}:::plan Connection236{{"Connection[236∈0] ➊
ᐸ231ᐳ"}}:::plan Connection251{{"Connection[251∈0] ➊
ᐸ246ᐳ"}}:::plan - Constant366 --> Connection251 + Constant378 --> Connection251 Connection271{{"Connection[271∈0] ➊
ᐸ269ᐳ"}}:::plan - Constant367{{"Constant[367∈0] ➊
ᐸ7ᐳ"}}:::plan - Constant366 & Constant367 --> PgFromExpression290 - Constant366 & Constant365 & Constant367 --> PgFromExpression296 - Constant366 & Constant367 --> PgFromExpression301 - Constant366 & Constant367 --> PgFromExpression306 - Constant366 & Constant367 --> PgFromExpression311 - Constant366 & Constant367 --> PgFromExpression316 + Constant379{{"Constant[379∈0] ➊
ᐸ7ᐳ"}}:::plan + Constant378 & Constant379 --> PgFromExpression290 + Constant378 & Constant377 & Constant379 --> PgFromExpression296 + Constant378 & Constant379 --> PgFromExpression301 + Constant378 & Constant379 --> PgFromExpression306 + Constant378 & Constant379 --> PgFromExpression311 + Constant378 & Constant379 --> PgFromExpression316 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 PgFromExpression117{{"PgFromExpression[117∈0] ➊"}}:::plan - Constant356{{"Constant[356∈0] ➊
ᐸ15ᐳ"}}:::plan - Constant356 --> PgFromExpression117 + Constant368{{"Constant[368∈0] ➊
ᐸ15ᐳ"}}:::plan + Constant368 --> PgFromExpression117 PgFromExpression122{{"PgFromExpression[122∈0] ➊"}}:::plan - Constant357{{"Constant[357∈0] ➊
ᐸ20ᐳ"}}:::plan - Constant358{{"Constant[358∈0] ➊
ᐸ'[...]'ᐳ"}}:::plan - Constant357 & Constant358 --> PgFromExpression122 + Constant369{{"Constant[369∈0] ➊
ᐸ20ᐳ"}}:::plan + Constant370{{"Constant[370∈0] ➊
ᐸ'[...]'ᐳ"}}:::plan + Constant369 & Constant370 --> PgFromExpression122 PgFromExpression129{{"PgFromExpression[129∈0] ➊"}}:::plan - Constant356 --> PgFromExpression129 + Constant368 --> PgFromExpression129 PgFromExpression134{{"PgFromExpression[134∈0] ➊"}}:::plan - Constant357 & Constant358 --> PgFromExpression134 + Constant369 & Constant370 --> PgFromExpression134 PgFromExpression138{{"PgFromExpression[138∈0] ➊"}}:::plan - Constant356 --> PgFromExpression138 + Constant368 --> PgFromExpression138 PgFromExpression143{{"PgFromExpression[143∈0] ➊"}}:::plan - Constant357 & Constant358 --> PgFromExpression143 - Constant364{{"Constant[364∈0] ➊
ᐸ5ᐳ"}}:::plan - Constant364 --> __InputObject151 + Constant369 & Constant370 --> PgFromExpression143 + Constant376{{"Constant[376∈0] ➊
ᐸ5ᐳ"}}:::plan + Constant376 --> __InputObject151 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 @@ -98,7 +98,7 @@ graph TD Constant335{{"Constant[335∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan Constant340{{"Constant[340∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan Constant346{{"Constant[346∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan - Constant351{{"Constant[351∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan + Constant363{{"Constant[363∈0] ➊
ᐸ[HIDDEN]ᐳ"}}:::plan PgSelect14[["PgSelect[14∈1] ➊
ᐸtypesᐳ"]]:::plan PgSelectInlineApply318["PgSelectInlineApply[318∈1] ➊"]:::plan PgSelectInlineApply334["PgSelectInlineApply[334∈1] ➊"]:::plan @@ -236,24 +236,27 @@ graph TD PgClassExpression101{{"PgClassExpression[101∈9]
ᐸ”c”.”compo...nd_type__)ᐳ"}}:::plan PgSelectSingle97 --> PgClassExpression101 PgSelect107[["PgSelect[107∈10] ➊
ᐸpostᐳ"]]:::plan - Object11 & Connection105 & PgFromExpression113 & PgFromExpression117 & PgFromExpression122 & PgFromExpression125 & PgFromExpression129 & PgFromExpression134 & PgFromExpression138 & PgFromExpression143 --> PgSelect107 + PgSelectInlineApply350["PgSelectInlineApply[350∈10] ➊"]:::plan + PgSelectInlineApply354["PgSelectInlineApply[354∈10] ➊"]:::plan + Object11 & Connection105 & PgFromExpression113 & PgFromExpression117 & PgFromExpression122 & PgFromExpression125 & PgFromExpression129 & PgFromExpression134 & PgFromExpression138 & PgFromExpression143 & PgFromExpression160 & PgSelectInlineApply350 & PgFromExpression190 & PgSelectInlineApply354 --> PgSelect107 PgSelectRows108[["PgSelectRows[108∈10] ➊"]]:::plan PgSelect107 --> PgSelectRows108 __Item109[/"__Item[109∈11]
ᐸ108ᐳ"\]:::itemplan PgSelectRows108 ==> __Item109 PgSelectSingle110{{"PgSelectSingle[110∈11]
ᐸpostᐳ"}}:::plan __Item109 --> PgSelectSingle110 - PgSelect192[["PgSelect[192∈12]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression112{{"PgClassExpression[112∈12]
ᐸ__post__ᐳ"}}:::plan - Object11 & PgClassExpression112 & PgFromExpression190 & Connection191 --> PgSelect192 - PgSelect156[["PgSelect[156∈12]
ᐸpost_computed_compound_type_arrayᐳ"]]:::plan - Object11 & PgClassExpression112 & PgFromExpression160 --> PgSelect156 __ListTransform204[["__ListTransform[204∈12]
ᐸeach:203ᐳ"]]:::plan PgSelectRows193[["PgSelectRows[193∈12]"]]:::plan - PgSelectRows193 & PgSelect192 --> __ListTransform204 + Lambda357{{"Lambda[357∈12]"}}:::plan + PgSelectRows193 & Lambda357 --> __ListTransform204 + List352{{"List[352∈12]
ᐸ109,351ᐳ"}}:::plan + Access351{{"Access[351∈12] ➊
ᐸ107.m.subqueryDetailsFor156ᐳ"}}:::plan + __Item109 & Access351 --> List352 + List356{{"List[356∈12]
ᐸ109,355ᐳ"}}:::plan + Access355{{"Access[355∈12] ➊
ᐸ107.m.subqueryDetailsFor192ᐳ"}}:::plan + __Item109 & Access355 --> List356 PgClassExpression111{{"PgClassExpression[111∈12]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle110 --> PgClassExpression111 - PgSelectSingle110 --> PgClassExpression112 PgClassExpression114{{"PgClassExpression[114∈12]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle110 --> PgClassExpression114 PgClassExpression118{{"PgClassExpression[118∈12]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan @@ -271,12 +274,17 @@ graph TD PgClassExpression144{{"PgClassExpression[144∈12]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle110 --> PgClassExpression144 PgSelectRows161[["PgSelectRows[161∈12]"]]:::plan - PgSelect156 --> PgSelectRows161 + Lambda353{{"Lambda[353∈12]"}}:::plan + Lambda353 --> PgSelectRows161 PgClassExpression176{{"PgClassExpression[176∈12]
ᐸ”a”.”post_...(__post__)ᐳ"}}:::plan PgSelectSingle110 --> PgClassExpression176 PgClassExpression179{{"PgClassExpression[179∈12]
ᐸ”a”.”post_...(__post__)ᐳ"}}:::plan PgSelectSingle110 --> PgClassExpression179 - PgSelect192 --> PgSelectRows193 + Lambda357 --> PgSelectRows193 + PgSelect107 --> Access351 + List352 --> Lambda353 + PgSelect107 --> Access355 + List356 --> Lambda357 __Item162[/"__Item[162∈13]
ᐸ161ᐳ"\]:::itemplan PgSelectRows161 ==> __Item162 PgSelectSingle163{{"PgSelectSingle[163∈13]
ᐸpost_computed_compound_type_arrayᐳ"}}:::plan @@ -318,16 +326,16 @@ graph TD PgCursor214{{"PgCursor[214∈22]"}}:::plan PgClassExpression211 & PgCursor214 & Connection191 --> Edge212 PgSelectSingle210{{"PgSelectSingle[210∈22]
ᐸpost_computed_interval_setᐳ"}}:::plan - Access213{{"Access[213∈22]
ᐸ192.cursorDetailsᐳ"}}:::plan + Access213{{"Access[213∈22]
ᐸ357.cursorDetailsᐳ"}}:::plan PgSelectSingle210 & Access213 --> PgCursor214 __Item209[/"__Item[209∈22]
ᐸ204ᐳ"\]:::itemplan __ListTransform204 ==> __Item209 __Item209 --> PgSelectSingle210 PgSelectSingle210 --> PgClassExpression211 - PgSelect192 --> Access213 + Lambda357 --> Access213 PgSelect223[["PgSelect[223∈25] ➊
ᐸpersonᐳ"]]:::plan - PgSelectInlineApply350["PgSelectInlineApply[350∈25] ➊"]:::plan - Object11 & Connection221 & PgFromExpression262 & PgSelectInlineApply350 --> PgSelect223 + PgSelectInlineApply362["PgSelectInlineApply[362∈25] ➊"]:::plan + Object11 & Connection221 & PgFromExpression262 & PgSelectInlineApply362 --> PgSelect223 PgSelectRows224[["PgSelectRows[224∈25] ➊"]]:::plan PgSelect223 --> PgSelectRows224 __Item225[/"__Item[225∈26]
ᐸ224ᐳ"\]:::itemplan @@ -336,10 +344,12 @@ graph TD __Item225 --> PgSelectSingle226 PgSelect237[["PgSelect[237∈27]
ᐸperson_friendsᐳ"]]:::plan PgClassExpression228{{"PgClassExpression[228∈27]
ᐸ__person__ᐳ"}}:::plan - Object11 & PgClassExpression228 & PgFromExpression235 & Connection236 --> PgSelect237 - Object355{{"Object[355∈27]
ᐸ{m,hasMore,items}ᐳ"}}:::plan - List354{{"List[354∈27]
ᐸ353ᐳ"}}:::plan - Constant351 & Constant320 & List354 --> Object355 + PgSelectInlineApply358["PgSelectInlineApply[358∈27] ➊"]:::plan + Object11 & PgClassExpression228 & PgFromExpression235 & Connection236 & PgFromExpression250 & PgSelectInlineApply358 --> PgSelect237 + Constant378 --> PgSelectInlineApply358 + Object367{{"Object[367∈27]
ᐸ{m,hasMore,items}ᐳ"}}:::plan + List366{{"List[366∈27]
ᐸ365ᐳ"}}:::plan + Constant363 & Constant320 & List366 --> Object367 PgClassExpression227{{"PgClassExpression[227∈27]
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle226 --> PgClassExpression227 PgSelectSingle226 --> PgClassExpression228 @@ -350,26 +360,28 @@ graph TD First263{{"First[263∈27]"}}:::plan PgSelectRows264[["PgSelectRows[264∈27]"]]:::plan PgSelectRows264 --> First263 - Object355 --> PgSelectRows264 + Object367 --> PgSelectRows264 PgSelectSingle265{{"PgSelectSingle[265∈27]
ᐸperson_first_postᐳ"}}:::plan First263 --> PgSelectSingle265 - RemapKeys353{{"RemapKeys[353∈27]
ᐸ226:{”0”:1,”1”:2}ᐳ"}}:::plan - PgSelectSingle226 --> RemapKeys353 - RemapKeys353 --> List354 + RemapKeys365{{"RemapKeys[365∈27]
ᐸ226:{”0”:1,”1”:2}ᐳ"}}:::plan + PgSelectSingle226 --> RemapKeys365 + RemapKeys365 --> List366 __Item239[/"__Item[239∈28]
ᐸ238ᐳ"\]:::itemplan PgSelectRows238 ==> __Item239 PgSelectSingle240{{"PgSelectSingle[240∈28]
ᐸperson_friendsᐳ"}}:::plan __Item239 --> PgSelectSingle240 - PgSelect252[["PgSelect[252∈29]
ᐸperson_friendsᐳ"]]:::plan - PgClassExpression242{{"PgClassExpression[242∈29]
ᐸ__person_friends__ᐳ"}}:::plan - Object11 & PgClassExpression242 & PgFromExpression250 & Connection251 & Constant366 --> PgSelect252 + List360{{"List[360∈29]
ᐸ239,359ᐳ"}}:::plan + Access359{{"Access[359∈29]
ᐸ237.m.subqueryDetailsFor252ᐳ"}}:::plan + __Item239 & Access359 --> List360 PgClassExpression241{{"PgClassExpression[241∈29]
ᐸ__person_f...full_name”ᐳ"}}:::plan PgSelectSingle240 --> PgClassExpression241 - PgSelectSingle240 --> PgClassExpression242 PgClassExpression243{{"PgClassExpression[243∈29]
ᐸ”c”.”perso...friends__)ᐳ"}}:::plan PgSelectSingle240 --> PgClassExpression243 PgSelectRows253[["PgSelectRows[253∈29]"]]:::plan - PgSelect252 --> PgSelectRows253 + Lambda361{{"Lambda[361∈29]"}}:::plan + Lambda361 --> PgSelectRows253 + PgSelect237 --> Access359 + List360 --> Lambda361 __Item254[/"__Item[254∈30]
ᐸ253ᐳ"\]:::itemplan PgSelectRows253 ==> __Item254 PgSelectSingle255{{"PgSelectSingle[255∈30]
ᐸperson_friendsᐳ"}}:::plan @@ -412,9 +424,9 @@ graph TD %% define steps subgraph "Buckets for queries/v4/procedure-computed-fields" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 23, 34, 41, 52, 63, 74, 83, 94, 190, 235, 250, 262, 319, 320, 325, 330, 335, 340, 346, 351, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 11, 12, 105, 113, 117, 122, 125, 129, 134, 138, 143, 151, 191, 221, 236, 251, 271, 290, 296, 301, 306, 311, 316, 145, 154, 160
2: PgSelect[282]
3: PgSelectRows[285]
ᐳ: First[284], PgSelectSingle[286]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 9, 10, 23, 34, 41, 52, 63, 74, 83, 94, 190, 235, 250, 262, 319, 320, 325, 330, 335, 340, 346, 363, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 11, 12, 105, 113, 117, 122, 125, 129, 134, 138, 143, 151, 191, 221, 236, 251, 271, 290, 296, 301, 306, 311, 316, 145, 154, 160
2: PgSelect[282]
3: PgSelectRows[285]
ᐳ: First[284], PgSelectSingle[286]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12,PgFromExpression23,PgFromExpression34,PgFromExpression41,PgFromExpression52,PgFromExpression63,PgFromExpression74,PgFromExpression83,PgFromExpression94,Connection105,PgFromExpression113,PgFromExpression117,PgFromExpression122,PgFromExpression125,PgFromExpression129,PgFromExpression134,PgFromExpression138,PgFromExpression143,__InputObject145,__InputObject151,BakedInput154,PgFromExpression160,PgFromExpression190,Connection191,Connection221,PgFromExpression235,Connection236,PgFromExpression250,Connection251,PgFromExpression262,Connection271,PgSelect282,First284,PgSelectRows285,PgSelectSingle286,PgFromExpression290,PgFromExpression296,PgFromExpression301,PgFromExpression306,PgFromExpression311,PgFromExpression316,Constant319,Constant320,Constant325,Constant330,Constant335,Constant340,Constant346,Constant351,Constant356,Constant357,Constant358,Constant359,Constant360,Constant361,Constant362,Constant363,Constant364,Constant365,Constant366,Constant367 bucket0 + class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12,PgFromExpression23,PgFromExpression34,PgFromExpression41,PgFromExpression52,PgFromExpression63,PgFromExpression74,PgFromExpression83,PgFromExpression94,Connection105,PgFromExpression113,PgFromExpression117,PgFromExpression122,PgFromExpression125,PgFromExpression129,PgFromExpression134,PgFromExpression138,PgFromExpression143,__InputObject145,__InputObject151,BakedInput154,PgFromExpression160,PgFromExpression190,Connection191,Connection221,PgFromExpression235,Connection236,PgFromExpression250,Connection251,PgFromExpression262,Connection271,PgSelect282,First284,PgSelectRows285,PgSelectSingle286,PgFromExpression290,PgFromExpression296,PgFromExpression301,PgFromExpression306,PgFromExpression311,PgFromExpression316,Constant319,Constant320,Constant325,Constant330,Constant335,Constant340,Constant346,Constant363,Constant368,Constant369,Constant370,Constant371,Constant372,Constant373,Constant374,Constant375,Constant376,Constant377,Constant378,Constant379 bucket0 Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6, 23, 63, 34, 41, 52, 74, 83, 94, 319, 320, 325, 330, 335, 340, 346

ROOT Connectionᐸ8ᐳ[12]
1: 318, 334
2: PgSelect[14]
3: PgSelectRows[15]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,PgSelect14,PgSelectRows15,PgSelectInlineApply318,PgSelectInlineApply334 bucket1 @@ -442,15 +454,15 @@ graph TD Bucket9("Bucket 9 (nullableBoundary)
Deps: 97

ROOT PgSelectSingle{7}ᐸfrmcdc_compoundTypeᐳ[97]"):::bucket classDef bucket9 stroke:#ff0000 class Bucket9,PgClassExpression98,PgClassExpression99,PgClassExpression101 bucket9 - Bucket10("Bucket 10 (nullableBoundary)
Deps: 11, 105, 6, 113, 117, 122, 125, 129, 134, 138, 143, 160, 190, 191

ROOT Connectionᐸ103ᐳ[105]
1: PgSelect[107]
2: PgSelectRows[108]"):::bucket + Bucket10("Bucket 10 (nullableBoundary)
Deps: 11, 105, 6, 113, 117, 122, 125, 129, 134, 138, 143, 160, 190, 191

ROOT Connectionᐸ103ᐳ[105]
1: 350, 354
2: PgSelect[107]
3: PgSelectRows[108]"):::bucket classDef bucket10 stroke:#ffff00 - class Bucket10,PgSelect107,PgSelectRows108 bucket10 - Bucket11("Bucket 11 (listItem)
Deps: 11, 160, 190, 191, 6

ROOT __Item{11}ᐸ108ᐳ[109]"):::bucket + class Bucket10,PgSelect107,PgSelectRows108,PgSelectInlineApply350,PgSelectInlineApply354 bucket10 + Bucket11("Bucket 11 (listItem)
Deps: 107, 191

ROOT __Item{11}ᐸ108ᐳ[109]"):::bucket classDef bucket11 stroke:#00ffff class Bucket11,__Item109,PgSelectSingle110 bucket11 - Bucket12("Bucket 12 (nullableBoundary)
Deps: 110, 11, 160, 190, 191, 6

ROOT PgSelectSingle{11}ᐸpostᐳ[110]
1:
ᐳ: 111, 112, 114, 118, 123, 126, 130, 135, 139, 144, 176, 179
2: PgSelect[156], PgSelect[192]
3: PgSelectRows[161], PgSelectRows[193]
4: __ListTransform[204]"):::bucket + Bucket12("Bucket 12 (nullableBoundary)
Deps: 110, 107, 109, 191

ROOT PgSelectSingle{11}ᐸpostᐳ[110]
1:
ᐳ: 111, 114, 118, 123, 126, 130, 135, 139, 144, 176, 179, 351, 355, 352, 353, 356, 357
2: PgSelectRows[161], PgSelectRows[193]
3: __ListTransform[204]"):::bucket classDef bucket12 stroke:#4169e1 - class Bucket12,PgClassExpression111,PgClassExpression112,PgClassExpression114,PgClassExpression118,PgClassExpression123,PgClassExpression126,PgClassExpression130,PgClassExpression135,PgClassExpression139,PgClassExpression144,PgSelect156,PgSelectRows161,PgClassExpression176,PgClassExpression179,PgSelect192,PgSelectRows193,__ListTransform204 bucket12 + class Bucket12,PgClassExpression111,PgClassExpression114,PgClassExpression118,PgClassExpression123,PgClassExpression126,PgClassExpression130,PgClassExpression135,PgClassExpression139,PgClassExpression144,PgSelectRows161,PgClassExpression176,PgClassExpression179,PgSelectRows193,__ListTransform204,Access351,List352,Lambda353,Access355,List356,Lambda357 bucket12 Bucket13("Bucket 13 (listItem)

ROOT __Item{13}ᐸ161ᐳ[162]"):::bucket classDef bucket13 stroke:#3cb371 class Bucket13,__Item162,PgSelectSingle163 bucket13 @@ -478,7 +490,7 @@ graph TD Bucket21("Bucket 21 (subroutine)

ROOT PgClassExpression{21}ᐸ__post_com...al_set__.vᐳ[208]"):::bucket classDef bucket21 stroke:#0000ff class Bucket21,__Item206,PgSelectSingle207,PgClassExpression208 bucket21 - Bucket22("Bucket 22 (listItem)
Deps: 191, 192

ROOT __Item{22}ᐸ204ᐳ[209]"):::bucket + Bucket22("Bucket 22 (listItem)
Deps: 191, 357

ROOT __Item{22}ᐸ204ᐳ[209]"):::bucket classDef bucket22 stroke:#7fff00 class Bucket22,__Item209,PgSelectSingle210,PgClassExpression211,Edge212,Access213,PgCursor214 bucket22 Bucket23("Bucket 23 (nullableBoundary)
Deps: 212, 211, 214

ROOT Edge{22}[212]"):::bucket @@ -487,21 +499,21 @@ graph TD Bucket24("Bucket 24 (nullableBoundary)
Deps: 211

ROOT PgClassExpression{22}ᐸ__post_com...al_set__.vᐳ[211]"):::bucket classDef bucket24 stroke:#808000 class Bucket24 bucket24 - Bucket25("Bucket 25 (nullableBoundary)
Deps: 11, 221, 6, 262, 235, 236, 351, 320, 250, 251, 366

ROOT Connectionᐸ219ᐳ[221]
1: PgSelectInlineApply[350]
2: PgSelect[223]
3: PgSelectRows[224]"):::bucket + Bucket25("Bucket 25 (nullableBoundary)
Deps: 11, 221, 6, 262, 235, 236, 250, 378, 363, 320, 251

ROOT Connectionᐸ219ᐳ[221]
1: PgSelectInlineApply[362]
2: PgSelect[223]
3: PgSelectRows[224]"):::bucket classDef bucket25 stroke:#dda0dd - class Bucket25,PgSelect223,PgSelectRows224,PgSelectInlineApply350 bucket25 - Bucket26("Bucket 26 (listItem)
Deps: 11, 235, 236, 6, 351, 320, 250, 251, 366

ROOT __Item{26}ᐸ224ᐳ[225]"):::bucket + class Bucket25,PgSelect223,PgSelectRows224,PgSelectInlineApply362 bucket25 + Bucket26("Bucket 26 (listItem)
Deps: 11, 235, 236, 6, 250, 378, 363, 320, 251

ROOT __Item{26}ᐸ224ᐳ[225]"):::bucket classDef bucket26 stroke:#ff0000 class Bucket26,__Item225,PgSelectSingle226 bucket26 - Bucket27("Bucket 27 (nullableBoundary)
Deps: 226, 11, 235, 236, 6, 351, 320, 250, 251, 366

ROOT PgSelectSingle{26}ᐸpersonᐳ[226]
1:
ᐳ: 227, 228, 229, 353, 354, 355
2: PgSelect[237], PgSelectRows[264]
ᐳ: First[263], PgSelectSingle[265]
3: PgSelectRows[238]"):::bucket + Bucket27("Bucket 27 (nullableBoundary)
Deps: 226, 11, 235, 236, 6, 250, 378, 363, 320, 251

ROOT PgSelectSingle{26}ᐸpersonᐳ[226]
1: PgSelectInlineApply[358]
ᐳ: 227, 228, 229, 365, 366, 367
2: PgSelect[237], PgSelectRows[264]
ᐳ: First[263], PgSelectSingle[265]
3: PgSelectRows[238]"):::bucket classDef bucket27 stroke:#ffff00 - class Bucket27,PgClassExpression227,PgClassExpression228,PgClassExpression229,PgSelect237,PgSelectRows238,First263,PgSelectRows264,PgSelectSingle265,RemapKeys353,List354,Object355 bucket27 - Bucket28("Bucket 28 (listItem)
Deps: 11, 250, 251, 366, 6

ROOT __Item{28}ᐸ238ᐳ[239]"):::bucket + class Bucket27,PgClassExpression227,PgClassExpression228,PgClassExpression229,PgSelect237,PgSelectRows238,First263,PgSelectRows264,PgSelectSingle265,PgSelectInlineApply358,RemapKeys365,List366,Object367 bucket27 + Bucket28("Bucket 28 (listItem)
Deps: 237, 251

ROOT __Item{28}ᐸ238ᐳ[239]"):::bucket classDef bucket28 stroke:#00ffff class Bucket28,__Item239,PgSelectSingle240 bucket28 - Bucket29("Bucket 29 (nullableBoundary)
Deps: 240, 11, 250, 251, 366, 6

ROOT PgSelectSingle{28}ᐸperson_friendsᐳ[240]
1:
ᐳ: 241, 242, 243
2: PgSelect[252]
3: PgSelectRows[253]"):::bucket + Bucket29("Bucket 29 (nullableBoundary)
Deps: 240, 237, 239, 251

ROOT PgSelectSingle{28}ᐸperson_friendsᐳ[240]
1:
ᐳ: 241, 243, 359, 360, 361
2: PgSelectRows[253]"):::bucket classDef bucket29 stroke:#4169e1 - class Bucket29,PgClassExpression241,PgClassExpression242,PgClassExpression243,PgSelect252,PgSelectRows253 bucket29 + class Bucket29,PgClassExpression241,PgClassExpression243,PgSelectRows253,Access359,List360,Lambda361 bucket29 Bucket30("Bucket 30 (listItem)

ROOT __Item{30}ᐸ253ᐳ[254]"):::bucket classDef bucket30 stroke:#3cb371 class Bucket30,__Item254,PgSelectSingle255 bucket30 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.sql b/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.sql index c508c3fdb2..57b28ac00b 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/procedure-computed-fields.sql @@ -59,45 +59,65 @@ order by __types__."id" asc; select __post__."headline" as "0", - case when (__post__) is not distinct from null then null::text else json_build_array((((__post__)."id"))::text, ((__post__)."headline"), ((__post__)."body"), (((__post__)."author_id"))::text, (((__post__)."enums"))::text, (case when (((__post__)."comptypes")) is not distinct from null then null::text else array( - select case when (__comptype__) is not distinct from null then null::text else json_build_array(to_char(((__comptype__)."schedule"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), (((__comptype__)."is_optimised"))::text)::text end - from unnest(((__post__)."comptypes")) __comptype__ - )::text end))::text end as "1", - "a"."post_headline_trimmed"(__post__) as "2", + "a"."post_headline_trimmed"(__post__) as "1", "a"."post_headline_trimmed"( __post__, $1::"int4" - ) as "3", + ) as "2", "a"."post_headline_trimmed"( __post__, $2::"int4", $3::"text" - ) as "4", - "a"."post_headline_trimmed_strict"(__post__) as "5", + ) as "3", + "a"."post_headline_trimmed_strict"(__post__) as "4", "a"."post_headline_trimmed_strict"( __post__, $4::"int4" - ) as "6", + ) as "5", "a"."post_headline_trimmed_strict"( __post__, $5::"int4", $6::"text" - ) as "7", + ) as "6", "a"."post_headline_trimmed_no_defaults"( __post__, $7::"int4", $8::"text" - ) as "8", + ) as "7", "a"."post_headline_trimmed_no_defaults"( __post__, $9::"int4", $10::"text" - ) as "9", - ("a"."post_computed_text_array"(__post__))::text as "10", + ) as "8", + ("a"."post_computed_text_array"(__post__))::text as "9", (case when ("a"."post_computed_interval_array"(__post__)) is not distinct from null then null::text else array( select to_char(__entry__, 'YYYY_MM_DD_HH24_MI_SS.US'::text) from unnest("a"."post_computed_interval_array"(__post__)) __entry__ - )::text end) as "11" + )::text end) as "10", + array( + select array[ + __post_computed_compound_type_array__."a"::text, + __post_computed_compound_type_array__."b", + __post_computed_compound_type_array__."c"::text, + __post_computed_compound_type_array__."d", + __post_computed_compound_type_array__."e"::text, + __post_computed_compound_type_array__."f"::text, + to_char(__post_computed_compound_type_array__."g", 'YYYY_MM_DD_HH24_MI_SS.US'::text), + __post_computed_compound_type_array__."foo_bar"::text, + (not (__post_computed_compound_type_array__ is null))::text + ]::text[] + from unnest("a"."post_computed_compound_type_array"( + __post__, + $11::"c"."compound_type" + )) as __post_computed_compound_type_array__ + )::text as "11", + array( + select array[ + to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text), + (row_number() over (partition by 1))::text + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set__(v) + )::text as "12" from "a"."post" as __post__ order by __post__."id" asc; @@ -160,54 +180,20 @@ lateral ( on TRUE ) as __frmcdc_nested_compound_type_result__; -select __post_computed_compound_type_array_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"a"."post" as "id0" from json_array_elements($2::json) with ordinality as ids) as __post_computed_compound_type_array_identifiers__, -lateral ( - select - __post_computed_compound_type_array__."a"::text as "0", - __post_computed_compound_type_array__."b" as "1", - __post_computed_compound_type_array__."c"::text as "2", - __post_computed_compound_type_array__."d" as "3", - __post_computed_compound_type_array__."e"::text as "4", - __post_computed_compound_type_array__."f"::text as "5", - to_char(__post_computed_compound_type_array__."g", 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "6", - __post_computed_compound_type_array__."foo_bar"::text as "7", - (not (__post_computed_compound_type_array__ is null))::text as "8", - __post_computed_compound_type_array_identifiers__.idx as "9" - from unnest("a"."post_computed_compound_type_array"( - __post_computed_compound_type_array_identifiers__."id0", - $1::"c"."compound_type" - )) as __post_computed_compound_type_array__ -) as __post_computed_compound_type_array_result__; - -select __post_computed_interval_set_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"a"."post" as "id0" from json_array_elements($1::json) with ordinality as ids) as __post_computed_interval_set_identifiers__, -lateral ( - select - to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "0", - (row_number() over (partition by 1))::text as "1", - __post_computed_interval_set_identifiers__.idx as "2" - from "a"."post_computed_interval_set"(__post_computed_interval_set_identifiers__."id0") as __post_computed_interval_set__(v) -) as __post_computed_interval_set_result__; - -select __person_friends_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"c"."person" as "id0" from json_array_elements($1::json) with ordinality as ids) as __person_friends_identifiers__, -lateral ( - select - __person_friends__."person_full_name" as "0", - case when (__person_friends__) is not distinct from null then null::text else json_build_array((((__person_friends__)."id"))::text, ((__person_friends__)."person_full_name"), (((__person_friends__)."aliases"))::text, ((__person_friends__)."about"), ((__person_friends__)."email"), case when (((__person_friends__)."site")) is not distinct from null then null::text else json_build_array(((((__person_friends__)."site"))."url"))::text end, (((__person_friends__)."config"))::text, (((__person_friends__)."last_login_from_ip"))::text, (((__person_friends__)."last_login_from_subnet"))::text, (((__person_friends__)."user_mac"))::text, to_char(((__person_friends__)."created_at"), 'YYYY-MM-DD"T"HH24:MI:SS.US'::text))::text end as "1", - "c"."person_first_name"(__person_friends__) as "2", - __person_friends_identifiers__.idx as "3" - from "c"."person_friends"(__person_friends_identifiers__."id0") as __person_friends__ -) as __person_friends_result__; - select __person_friends_result__.* from (select ids.ordinality - 1 as idx, (ids.value->>0)::"c"."person" as "id0" from json_array_elements($1::json) with ordinality as ids) as __person_friends_identifiers__, lateral ( select __person_friends__."person_full_name" as "0", "c"."person_first_name"(__person_friends__) as "1", - __person_friends_identifiers__.idx as "2" + array( + select array[ + __person_friends_2."person_full_name", + "c"."person_first_name"(__person_friends_2) + ]::text[] + from "c"."person_friends"(__person_friends__) as __person_friends_2 + limit 1 + )::text as "2", + __person_friends_identifiers__.idx as "3" from "c"."person_friends"(__person_friends_identifiers__."id0") as __person_friends__ - limit 1 ) as __person_friends_result__; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.mermaid index 57364b3b2c..088ba0900d 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.mermaid @@ -12,9 +12,9 @@ graph TD Connection23{{"Connection[23∈0] ➊
ᐸ21ᐳ"}}:::plan PgSelect35[["PgSelect[35∈0] ➊
ᐸpersonᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Constant248{{"Constant[248∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant252{{"Constant[252∈0] ➊
ᐸ1ᐳ"}}:::plan PgSelectInlineApply223["PgSelectInlineApply[223∈0] ➊"]:::plan - Object10 & Constant248 & PgSelectInlineApply223 --> PgSelect35 + Object10 & Constant252 & PgSelectInlineApply223 --> PgSelect35 PgSelect60[["PgSelect[60∈0] ➊
ᐸpersonᐳ"]]:::plan Access58{{"Access[58∈0] ➊
ᐸ57.1ᐳ"}}:::plan PgSelectInlineApply229["PgSelectInlineApply[229∈0] ➊"]:::plan @@ -27,25 +27,26 @@ graph TD Access83 & PgSelectInlineApply235 --> PgSelect85 Connection122{{"Connection[122∈0] ➊
ᐸ120ᐳ"}}:::plan PgSelect136[["PgSelect[136∈0] ➊
ᐸpersonᐳ"]]:::plan - Constant252{{"Constant[252∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant256{{"Constant[256∈0] ➊
ᐸ2ᐳ"}}:::plan PgSelectInlineApply241["PgSelectInlineApply[241∈0] ➊"]:::plan - Object10 & Constant252 & PgSelectInlineApply241 --> PgSelect136 + Object10 & Constant256 & PgSelectInlineApply241 --> PgSelect136 Connection175{{"Connection[175∈0] ➊
ᐸ173ᐳ"}}:::plan + PgSelect189[["PgSelect[189∈0] ➊
ᐸpersonᐳ"]]:::plan + Constant251{{"Constant[251∈0] ➊
ᐸ3ᐳ"}}:::plan + PgSelectInlineApply247["PgSelectInlineApply[247∈0] ➊"]:::plan + Object10 & Constant251 & PgSelectInlineApply247 --> PgSelect189 Connection203{{"Connection[203∈0] ➊
ᐸ199ᐳ"}}:::plan PgSelect7[["PgSelect[7∈0] ➊
ᐸperson_secretᐳ"]]:::plan - Constant247{{"Constant[247∈0] ➊
ᐸ3ᐳ"}}:::plan - Object10 & Constant247 --> PgSelect7 + Object10 & Constant251 --> PgSelect7 Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 PgSelect107[["PgSelect[107∈0] ➊
ᐸleft_armᐳ"]]:::plan - Constant251{{"Constant[251∈0] ➊
ᐸ42ᐳ"}}:::plan - Object10 & Constant251 --> PgSelect107 + Constant255{{"Constant[255∈0] ➊
ᐸ42ᐳ"}}:::plan + Object10 & Constant255 --> PgSelect107 PgSelect160[["PgSelect[160∈0] ➊
ᐸpostᐳ"]]:::plan - Constant253{{"Constant[253∈0] ➊
ᐸ7ᐳ"}}:::plan - Object10 & Constant253 --> PgSelect160 - PgSelect189[["PgSelect[189∈0] ➊
ᐸpersonᐳ"]]:::plan - Object10 & Constant247 --> PgSelect189 + Constant257{{"Constant[257∈0] ➊
ᐸ7ᐳ"}}:::plan + Object10 & Constant257 --> PgSelect160 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access8 __Value2 --> Access9 @@ -62,8 +63,8 @@ graph TD PgSelectSingle39{{"PgSelectSingle[39∈0] ➊
ᐸpersonᐳ"}}:::plan First37 --> PgSelectSingle39 Lambda57{{"Lambda[57∈0] ➊
ᐸspecifier_Person_base64JSONᐳ"}}:::plan - Constant249{{"Constant[249∈0] ➊
ᐸ'fa4f3e13-456c-4a9e-8c1e-37a6e3177d0b'ᐳ"}}:::plan - Constant249 --> Lambda57 + Constant253{{"Constant[253∈0] ➊
ᐸ'fa4f3e13-456c-4a9e-8c1e-37a6e3177d0b'ᐳ"}}:::plan + Constant253 --> Lambda57 Lambda57 --> Access58 First62{{"First[62∈0] ➊"}}:::plan PgSelectRows63[["PgSelectRows[63∈0] ➊"]]:::plan @@ -72,8 +73,8 @@ graph TD PgSelectSingle64{{"PgSelectSingle[64∈0] ➊
ᐸpersonᐳ"}}:::plan First62 --> PgSelectSingle64 Lambda82{{"Lambda[82∈0] ➊
ᐸspecifier_Person_base64JSONᐳ"}}:::plan - Constant250{{"Constant[250∈0] ➊
ᐸ'WyJwZW9wbGUiLDBd'ᐳ"}}:::plan - Constant250 --> Lambda82 + Constant254{{"Constant[254∈0] ➊
ᐸ'WyJwZW9wbGUiLDBd'ᐳ"}}:::plan + Constant254 --> Lambda82 Lambda82 --> Access83 First87{{"First[87∈0] ➊"}}:::plan PgSelectRows88[["PgSelectRows[88∈0] ➊"]]:::plan @@ -311,16 +312,20 @@ graph TD PgSelectSingle180 --> PgClassExpression186 PgClassExpression187{{"PgClassExpression[187∈20]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle180 --> PgClassExpression187 - PgSelect205[["PgSelect[205∈21] ➊
ᐸpostᐳ"]]:::plan - PgClassExpression195{{"PgClassExpression[195∈21] ➊
ᐸ__person__.”id”ᐳ"}}:::plan - Object10 & PgClassExpression195 & Connection203 --> PgSelect205 List196{{"List[196∈21] ➊
ᐸ40,195ᐳ"}}:::plan + PgClassExpression195{{"PgClassExpression[195∈21] ➊
ᐸ__person__.”id”ᐳ"}}:::plan Constant40 & PgClassExpression195 --> List196 + List249{{"List[249∈21] ➊
ᐸ191,248ᐳ"}}:::plan + Access248{{"Access[248∈21] ➊
ᐸ189.m.subqueryDetailsFor205ᐳ"}}:::plan + First191 & Access248 --> List249 PgSelectSingle193 --> PgClassExpression195 Lambda197{{"Lambda[197∈21] ➊
ᐸbase64JSONEncodeᐳ"}}:::plan List196 --> Lambda197 PgSelectRows206[["PgSelectRows[206∈21] ➊"]]:::plan - PgSelect205 --> PgSelectRows206 + Lambda250{{"Lambda[250∈21] ➊"}}:::plan + Lambda250 --> PgSelectRows206 + PgSelect189 --> Access248 + List249 --> Lambda250 __Item207[/"__Item[207∈22]
ᐸ206ᐳ"\]:::itemplan PgSelectRows206 ==> __Item207 PgSelectSingle208{{"PgSelectSingle[208∈22]
ᐸpostᐳ"}}:::plan @@ -345,9 +350,9 @@ graph TD %% define steps subgraph "Buckets for queries/v4/rbac.basic" - Bucket0("Bucket 0 (root)

1: 223, 229, 235, 241
ᐳ: 8, 9, 14, 19, 40, 112, 165, 224, 225, 230, 236, 242, 247, 248, 249, 250, 251, 252, 253, 10, 23, 57, 58, 82, 83, 122, 175, 203
2: 7, 35, 60, 85, 107, 136, 160, 189, 216
3: 12, 38, 63, 88, 110, 139, 163, 192, 219
ᐳ: 11, 13, 37, 39, 62, 64, 87, 89, 109, 111, 138, 140, 162, 164, 191, 193, 218, 220"):::bucket + Bucket0("Bucket 0 (root)

1: 223, 229, 235, 241
ᐳ: 8, 9, 14, 19, 40, 112, 165, 224, 225, 230, 236, 242, 251, 252, 253, 254, 255, 256, 257, 10, 23, 57, 58, 82, 83, 122, 175, 203
2: 7, 35, 60, 85, 107, 136, 160, 216, 247
3: 12, 38, 63, 88, 110, 139, 163, 189, 219
ᐳ: 11, 13, 37, 39, 62, 64, 87, 89, 109, 111, 138, 140, 162, 164, 218, 220
4: PgSelectRows[192]
ᐳ: First[191], PgSelectSingle[193]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,Constant14,Connection23,PgSelect35,First37,PgSelectRows38,PgSelectSingle39,Constant40,Lambda57,Access58,PgSelect60,First62,PgSelectRows63,PgSelectSingle64,Lambda82,Access83,PgSelect85,First87,PgSelectRows88,PgSelectSingle89,PgSelect107,First109,PgSelectRows110,PgSelectSingle111,Constant112,Connection122,PgSelect136,First138,PgSelectRows139,PgSelectSingle140,PgSelect160,First162,PgSelectRows163,PgSelectSingle164,Constant165,Connection175,PgSelect189,First191,PgSelectRows192,PgSelectSingle193,Connection203,PgSelect216,First218,PgSelectRows219,PgSelectSingle220,PgSelectInlineApply223,Constant224,Constant225,PgSelectInlineApply229,Constant230,PgSelectInlineApply235,Constant236,PgSelectInlineApply241,Constant242,Constant247,Constant248,Constant249,Constant250,Constant251,Constant252,Constant253 bucket0 + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,First11,PgSelectRows12,PgSelectSingle13,Constant14,Connection23,PgSelect35,First37,PgSelectRows38,PgSelectSingle39,Constant40,Lambda57,Access58,PgSelect60,First62,PgSelectRows63,PgSelectSingle64,Lambda82,Access83,PgSelect85,First87,PgSelectRows88,PgSelectSingle89,PgSelect107,First109,PgSelectRows110,PgSelectSingle111,Constant112,Connection122,PgSelect136,First138,PgSelectRows139,PgSelectSingle140,PgSelect160,First162,PgSelectRows163,PgSelectSingle164,Constant165,Connection175,PgSelect189,First191,PgSelectRows192,PgSelectSingle193,Connection203,PgSelect216,First218,PgSelectRows219,PgSelectSingle220,PgSelectInlineApply223,Constant224,Constant225,PgSelectInlineApply229,Constant230,PgSelectInlineApply235,Constant236,PgSelectInlineApply241,Constant242,PgSelectInlineApply247,Constant251,Constant252,Constant253,Constant254,Constant255,Constant256,Constant257 bucket0 Bucket1("Bucket 1 (nullableBoundary)
Deps: 13, 14

ROOT PgSelectSingleᐸperson_secretᐳ[13]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,PgClassExpression15,List16,Lambda17,PgClassExpression18 bucket1 @@ -408,9 +413,9 @@ graph TD Bucket20("Bucket 20 (nullableBoundary)
Deps: 180, 165

ROOT PgSelectSingle{19}ᐸpostᐳ[180]"):::bucket classDef bucket20 stroke:#ffa500 class Bucket20,PgClassExpression182,List183,Lambda184,PgClassExpression185,PgClassExpression186,PgClassExpression187 bucket20 - Bucket21("Bucket 21 (nullableBoundary)
Deps: 193, 40, 10, 203, 19, 165

ROOT PgSelectSingleᐸpersonᐳ[193]
1:
ᐳ: 195, 196, 197
2: PgSelect[205]
3: PgSelectRows[206]"):::bucket + Bucket21("Bucket 21 (nullableBoundary)
Deps: 193, 40, 189, 191, 165, 203

ROOT PgSelectSingleᐸpersonᐳ[193]
1:
ᐳ: 195, 248, 196, 197, 249, 250
2: PgSelectRows[206]"):::bucket classDef bucket21 stroke:#0000ff - class Bucket21,PgClassExpression195,List196,Lambda197,PgSelect205,PgSelectRows206 bucket21 + class Bucket21,PgClassExpression195,List196,Lambda197,PgSelectRows206,Access248,List249,Lambda250 bucket21 Bucket22("Bucket 22 (listItem)
Deps: 165

ROOT __Item{22}ᐸ206ᐳ[207]"):::bucket classDef bucket22 stroke:#7fff00 class Bucket22,__Item207,PgSelectSingle208 bucket22 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.sql b/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.sql index 0e9f2366b1..f45b07a9ec 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/rbac.basic.sql @@ -111,11 +111,9 @@ begin; /*fake*/ select set_config(el->>0, el->>1, true) from json_array_elements($1::json) el select - __person__."id"::text as "0" -from "c"."person" as __person__ -where ( - __person__."id" = $1::"int4" -); + __return_table_without_grants__."person_id_1"::text as "0", + __return_table_without_grants__."person_id_2"::text as "1" +from "c"."return_table_without_grants"() as __return_table_without_grants__; commit; /*fake*/ @@ -124,9 +122,24 @@ begin; /*fake*/ select set_config(el->>0, el->>1, true) from json_array_elements($1::json) el select - __return_table_without_grants__."person_id_1"::text as "0", - __return_table_without_grants__."person_id_2"::text as "1" -from "c"."return_table_without_grants"() as __return_table_without_grants__; + __person__."id"::text as "0", + array( + select array[ + __post__."id"::text, + __post__."headline", + __post__."body", + __post__."author_id"::text + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" + ) + order by __post__."id" asc + )::text as "1" +from "c"."person" as __person__ +where ( + __person__."id" = $1::"int4" +); commit; /*fake*/ @@ -168,21 +181,4 @@ select from "a"."post" as __post__ order by __post__."id" asc; -commit; /*fake*/ - -begin; /*fake*/ - -select set_config(el->>0, el->>1, true) from json_array_elements($1::json) el - -select - __post__."id"::text as "0", - __post__."headline" as "1", - __post__."body" as "2", - __post__."author_id"::text as "3" -from "a"."post" as __post__ -where ( - __post__."author_id" = $1::"int4" -) -order by __post__."id" asc; - commit; /*fake*/ \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.mermaid index 5bfe798b43..68122af3da 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.mermaid @@ -11,8 +11,8 @@ graph TD %% plan dependencies Connection12{{"Connection[12∈0] ➊
ᐸ8ᐳ"}}:::plan Connection26{{"Connection[26∈0] ➊
ᐸ22ᐳ"}}:::plan - Constant95{{"Constant[95∈0] ➊
ᐸ2ᐳ"}}:::plan - Constant95 --> Connection26 + Constant115{{"Constant[115∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant115 --> Connection26 Connection39{{"Connection[39∈0] ➊
ᐸ37ᐳ"}}:::plan Connection51{{"Connection[51∈0] ➊
ᐸ49ᐳ"}}:::plan Connection62{{"Connection[62∈0] ➊
ᐸ60ᐳ"}}:::plan @@ -23,8 +23,8 @@ graph TD Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 __InputObject35{{"__InputObject[35∈0] ➊"}}:::plan - Constant96{{"Constant[96∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan - Constant96 --> __InputObject35 + Constant116{{"Constant[116∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan + Constant116 --> __InputObject35 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access9 __Value2 --> Access10 @@ -32,33 +32,55 @@ graph TD __InputObject35 --> ApplyInput41 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan PgSelect14[["PgSelect[14∈1] ➊
ᐸpersonᐳ"]]:::plan - Object11 & Connection12 --> PgSelect14 + PgSelectInlineApply95["PgSelectInlineApply[95∈1] ➊"]:::plan + PgSelectInlineApply99["PgSelectInlineApply[99∈1] ➊"]:::plan + PgSelectInlineApply103["PgSelectInlineApply[103∈1] ➊"]:::plan + PgSelectInlineApply107["PgSelectInlineApply[107∈1] ➊"]:::plan + Object11 & Connection12 & PgSelectInlineApply95 & PgSelectInlineApply99 & PgSelectInlineApply103 & PgSelectInlineApply107 --> PgSelect14 + ApplyInput41 --> PgSelectInlineApply99 + Constant115 --> PgSelectInlineApply95 PgSelectRows15[["PgSelectRows[15∈1] ➊"]]:::plan PgSelect14 --> PgSelectRows15 __Item16[/"__Item[16∈2]
ᐸ15ᐳ"\]:::itemplan PgSelectRows15 ==> __Item16 PgSelectSingle17{{"PgSelectSingle[17∈2]
ᐸpersonᐳ"}}:::plan __Item16 --> PgSelectSingle17 - PgSelect42[["PgSelect[42∈3]
ᐸpostᐳ"]]:::plan + List97{{"List[97∈3]
ᐸ16,96ᐳ"}}:::plan + Access96{{"Access[96∈3] ➊
ᐸ14.m.subqueryDetailsFor28ᐳ"}}:::plan + __Item16 & Access96 --> List97 + List101{{"List[101∈3]
ᐸ16,100ᐳ"}}:::plan + Access100{{"Access[100∈3] ➊
ᐸ14.m.subqueryDetailsFor42ᐳ"}}:::plan + __Item16 & Access100 --> List101 + List105{{"List[105∈3]
ᐸ16,104ᐳ"}}:::plan + Access104{{"Access[104∈3] ➊
ᐸ14.m.subqueryDetailsFor53ᐳ"}}:::plan + __Item16 & Access104 --> List105 + List109{{"List[109∈3]
ᐸ16,108ᐳ"}}:::plan + Access108{{"Access[108∈3] ➊
ᐸ14.m.subqueryDetailsFor64ᐳ"}}:::plan + __Item16 & Access108 --> List109 PgClassExpression18{{"PgClassExpression[18∈3]
ᐸ__person__.”id”ᐳ"}}:::plan - Object11 & PgClassExpression18 & ApplyInput41 & Connection39 --> PgSelect42 - PgSelect28[["PgSelect[28∈3]
ᐸpostᐳ"]]:::plan - Object11 & PgClassExpression18 & Connection26 & Constant95 --> PgSelect28 - PgSelect53[["PgSelect[53∈3]
ᐸcompound_keyᐳ"]]:::plan - Object11 & PgClassExpression18 & Connection51 --> PgSelect53 - PgSelect64[["PgSelect[64∈3]
ᐸcompound_keyᐳ"]]:::plan - Object11 & PgClassExpression18 & Connection62 --> PgSelect64 PgSelectSingle17 --> PgClassExpression18 PgClassExpression19{{"PgClassExpression[19∈3]
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle17 --> PgClassExpression19 PgSelectRows29[["PgSelectRows[29∈3]"]]:::plan - PgSelect28 --> PgSelectRows29 + Lambda98{{"Lambda[98∈3]"}}:::plan + Lambda98 --> PgSelectRows29 PgSelectRows43[["PgSelectRows[43∈3]"]]:::plan - PgSelect42 --> PgSelectRows43 + Lambda102{{"Lambda[102∈3]"}}:::plan + Lambda102 --> PgSelectRows43 PgSelectRows54[["PgSelectRows[54∈3]"]]:::plan - PgSelect53 --> PgSelectRows54 + Lambda106{{"Lambda[106∈3]"}}:::plan + Lambda106 --> PgSelectRows54 PgSelectRows65[["PgSelectRows[65∈3]"]]:::plan - PgSelect64 --> PgSelectRows65 + Lambda110{{"Lambda[110∈3]"}}:::plan + Lambda110 --> PgSelectRows65 + PgSelect14 --> Access96 + List97 --> Lambda98 + PgSelect14 --> Access100 + List101 --> Lambda102 + PgSelect14 --> Access104 + List105 --> Lambda106 + PgSelect14 --> Access108 + List109 --> Lambda110 __Item30[/"__Item[30∈4]
ᐸ29ᐳ"\]:::itemplan PgSelectRows29 ==> __Item30 PgSelectSingle31{{"PgSelectSingle[31∈4]
ᐸpostᐳ"}}:::plan @@ -92,21 +114,26 @@ graph TD PgClassExpression69{{"PgClassExpression[69∈11]
ᐸ__compound...rson_id_2”ᐳ"}}:::plan PgSelectSingle67 --> PgClassExpression69 PgSelect75[["PgSelect[75∈12] ➊
ᐸcompound_keyᐳ"]]:::plan - Object11 & Connection73 --> PgSelect75 + PgSelectInlineApply111["PgSelectInlineApply[111∈12] ➊"]:::plan + Object11 & Connection73 & PgSelectInlineApply111 --> PgSelect75 PgSelectRows76[["PgSelectRows[76∈12] ➊"]]:::plan PgSelect75 --> PgSelectRows76 __Item77[/"__Item[77∈13]
ᐸ76ᐳ"\]:::itemplan PgSelectRows76 ==> __Item77 PgSelectSingle78{{"PgSelectSingle[78∈13]
ᐸcompound_keyᐳ"}}:::plan __Item77 --> PgSelectSingle78 - PgSelect88[["PgSelect[88∈14]
ᐸforeign_keyᐳ"]]:::plan + List113{{"List[113∈14]
ᐸ77,112ᐳ"}}:::plan + Access112{{"Access[112∈14] ➊
ᐸ75.m.subqueryDetailsFor88ᐳ"}}:::plan + __Item77 & Access112 --> List113 PgClassExpression79{{"PgClassExpression[79∈14]
ᐸ__compound...rson_id_1”ᐳ"}}:::plan - PgClassExpression80{{"PgClassExpression[80∈14]
ᐸ__compound...rson_id_2”ᐳ"}}:::plan - Object11 & PgClassExpression79 & PgClassExpression80 & Connection86 --> PgSelect88 PgSelectSingle78 --> PgClassExpression79 + PgClassExpression80{{"PgClassExpression[80∈14]
ᐸ__compound...rson_id_2”ᐳ"}}:::plan PgSelectSingle78 --> PgClassExpression80 PgSelectRows89[["PgSelectRows[89∈14]"]]:::plan - PgSelect88 --> PgSelectRows89 + Lambda114{{"Lambda[114∈14]"}}:::plan + Lambda114 --> PgSelectRows89 + PgSelect75 --> Access112 + List113 --> Lambda114 __Item90[/"__Item[90∈15]
ᐸ89ᐳ"\]:::itemplan PgSelectRows89 ==> __Item90 PgSelectSingle91{{"PgSelectSingle[91∈15]
ᐸforeign_keyᐳ"}}:::plan @@ -123,16 +150,16 @@ graph TD subgraph "Buckets for queries/v4/relation-head-tail" Bucket0("Bucket 0 (root)"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12,Connection26,__InputObject35,Connection39,ApplyInput41,Connection51,Connection62,Connection73,Connection86,Constant95,Constant96 bucket0 - Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6, 26, 95, 41, 39, 51, 62

ROOT Connectionᐸ8ᐳ[12]
1: PgSelect[14]
2: PgSelectRows[15]"):::bucket + class Bucket0,__Value2,__Value4,Access9,Access10,Object11,Connection12,Connection26,__InputObject35,Connection39,ApplyInput41,Connection51,Connection62,Connection73,Connection86,Constant115,Constant116 bucket0 + Bucket1("Bucket 1 (nullableBoundary)
Deps: 11, 12, 6, 115, 41, 26, 39, 51, 62

ROOT Connectionᐸ8ᐳ[12]
1: 95, 99, 103, 107
2: PgSelect[14]
3: PgSelectRows[15]"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,PgSelect14,PgSelectRows15 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 11, 26, 6, 95, 41, 39, 51, 62

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket + class Bucket1,PgSelect14,PgSelectRows15,PgSelectInlineApply95,PgSelectInlineApply99,PgSelectInlineApply103,PgSelectInlineApply107 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 14, 26, 39, 51, 62

ROOT __Item{2}ᐸ15ᐳ[16]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item16,PgSelectSingle17 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 11, 26, 6, 95, 41, 39, 51, 62

ROOT PgSelectSingle{2}ᐸpersonᐳ[17]
1:
ᐳ: 18, 19
2: 28, 42, 53, 64
3: 29, 43, 54, 65"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 17, 14, 16, 26, 39, 51, 62

ROOT PgSelectSingle{2}ᐸpersonᐳ[17]
1:
ᐳ: 18, 19, 96, 100, 104, 108, 97, 98, 101, 102, 105, 106, 109, 110
2: 29, 43, 54, 65"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression18,PgClassExpression19,PgSelect28,PgSelectRows29,PgSelect42,PgSelectRows43,PgSelect53,PgSelectRows54,PgSelect64,PgSelectRows65 bucket3 + class Bucket3,PgClassExpression18,PgClassExpression19,PgSelectRows29,PgSelectRows43,PgSelectRows54,PgSelectRows65,Access96,List97,Lambda98,Access100,List101,Lambda102,Access104,List105,Lambda106,Access108,List109,Lambda110 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ29ᐳ[30]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item30,PgSelectSingle31 bucket4 @@ -157,15 +184,15 @@ graph TD Bucket11("Bucket 11 (nullableBoundary)
Deps: 67

ROOT PgSelectSingle{10}ᐸcompound_keyᐳ[67]"):::bucket classDef bucket11 stroke:#00ffff class Bucket11,PgClassExpression68,PgClassExpression69 bucket11 - Bucket12("Bucket 12 (nullableBoundary)
Deps: 11, 73, 6, 86

ROOT Connectionᐸ71ᐳ[73]
1: PgSelect[75]
2: PgSelectRows[76]"):::bucket + Bucket12("Bucket 12 (nullableBoundary)
Deps: 11, 73, 6, 86

ROOT Connectionᐸ71ᐳ[73]
1: PgSelectInlineApply[111]
2: PgSelect[75]
3: PgSelectRows[76]"):::bucket classDef bucket12 stroke:#4169e1 - class Bucket12,PgSelect75,PgSelectRows76 bucket12 - Bucket13("Bucket 13 (listItem)
Deps: 11, 86, 6

ROOT __Item{13}ᐸ76ᐳ[77]"):::bucket + class Bucket12,PgSelect75,PgSelectRows76,PgSelectInlineApply111 bucket12 + Bucket13("Bucket 13 (listItem)
Deps: 75, 86

ROOT __Item{13}ᐸ76ᐳ[77]"):::bucket classDef bucket13 stroke:#3cb371 class Bucket13,__Item77,PgSelectSingle78 bucket13 - Bucket14("Bucket 14 (nullableBoundary)
Deps: 78, 11, 86, 6

ROOT PgSelectSingle{13}ᐸcompound_keyᐳ[78]
1:
ᐳ: 79, 80
2: PgSelect[88]
3: PgSelectRows[89]"):::bucket + Bucket14("Bucket 14 (nullableBoundary)
Deps: 78, 75, 77, 86

ROOT PgSelectSingle{13}ᐸcompound_keyᐳ[78]
1:
ᐳ: 79, 80, 112, 113, 114
2: PgSelectRows[89]"):::bucket classDef bucket14 stroke:#a52a2a - class Bucket14,PgClassExpression79,PgClassExpression80,PgSelect88,PgSelectRows89 bucket14 + class Bucket14,PgClassExpression79,PgClassExpression80,PgSelectRows89,Access112,List113,Lambda114 bucket14 Bucket15("Bucket 15 (listItem)

ROOT __Item{15}ᐸ89ᐳ[90]"):::bucket classDef bucket15 stroke:#ff00ff class Bucket15,__Item90,PgSelectSingle91 bucket15 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.sql b/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.sql index 568a4c19ea..cc837720a7 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/relation-head-tail.sql @@ -1,89 +1,74 @@ select __person__."id"::text as "0", - __person__."person_full_name" as "1" + __person__."person_full_name" as "1", + array( + select array[ + __post__."headline", + __post__."author_id"::text + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" + ) + order by __post__."id" desc + limit 2 + )::text as "2", + array( + select array[ + __post_2."headline", + __post_2."author_id"::text + ]::text[] + from "a"."post" as __post_2 + where + ( + __post_2."author_id" = __person__."id" + ) and ( + __post_2."headline" = $1::"text" + ) + order by __post_2."id" asc + )::text as "3", + array( + select array[ + __compound_key__."person_id_1"::text, + __compound_key__."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key__ + where ( + __compound_key__."person_id_1" = __person__."id" + ) + order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc + )::text as "4", + array( + select array[ + __compound_key_2."person_id_1"::text, + __compound_key_2."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_2 + where ( + __compound_key_2."person_id_2" = __person__."id" + ) + order by __compound_key_2."person_id_1" asc, __compound_key_2."person_id_2" asc + )::text as "5" from "c"."person" as __person__ order by __person__."id" asc; select __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1" + __compound_key__."person_id_2"::text as "1", + array( + select array[ + __foreign_key__."person_id"::text, + __foreign_key__."compound_key_1"::text, + __foreign_key__."compound_key_2"::text, + (not (__foreign_key__ is null))::text + ]::text[] + from "a"."foreign_key" as __foreign_key__ + where + ( + __foreign_key__."compound_key_1" = __compound_key__."person_id_1" + ) and ( + __foreign_key__."compound_key_2" = __compound_key__."person_id_2" + ) + )::text as "2" from "c"."compound_key" as __compound_key__ -order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc; - -select __post_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __post_identifiers__, -lateral ( - select - __post__."headline" as "0", - __post__."author_id"::text as "1", - __post_identifiers__.idx as "2" - from "a"."post" as __post__ - where ( - __post__."author_id" = __post_identifiers__."id0" - ) - order by __post__."id" desc - limit 2 -) as __post_result__; - -select __post_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($2::json) with ordinality as ids) as __post_identifiers__, -lateral ( - select - __post__."headline" as "0", - __post__."author_id"::text as "1", - __post_identifiers__.idx as "2" - from "a"."post" as __post__ - where - ( - __post__."author_id" = __post_identifiers__."id0" - ) and ( - __post__."headline" = $1::"text" - ) - order by __post__."id" asc -) as __post_result__; - -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_1" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; - -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_2" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; - -select __foreign_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0", (ids.value->>1)::"int4" as "id1" from json_array_elements($1::json) with ordinality as ids) as __foreign_key_identifiers__, -lateral ( - select - __foreign_key__."person_id"::text as "0", - __foreign_key__."compound_key_1"::text as "1", - __foreign_key__."compound_key_2"::text as "2", - (not (__foreign_key__ is null))::text as "3", - __foreign_key_identifiers__.idx as "4" - from "a"."foreign_key" as __foreign_key__ - where - ( - __foreign_key__."compound_key_1" = __foreign_key_identifiers__."id0" - ) and ( - __foreign_key__."compound_key_2" = __foreign_key_identifiers__."id1" - ) -) as __foreign_key_result__; \ No newline at end of file +order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.mermaid index 9566404ab1..0377131b1f 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.mermaid @@ -11,51 +11,55 @@ graph TD %% plan dependencies PgSelect7[["PgSelect[7∈0] ➊
ᐸpersonᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Object10 --> PgSelect7 + PgSelectInlineApply472["PgSelectInlineApply[472∈0] ➊"]:::plan + PgSelectInlineApply476["PgSelectInlineApply[476∈0] ➊"]:::plan + PgSelectInlineApply480["PgSelectInlineApply[480∈0] ➊"]:::plan + PgSelectInlineApply484["PgSelectInlineApply[484∈0] ➊"]:::plan + Object10 & PgSelectInlineApply472 & PgSelectInlineApply476 & PgSelectInlineApply480 & PgSelectInlineApply484 --> PgSelect7 Connection23{{"Connection[23∈0] ➊
ᐸ18ᐳ"}}:::plan Connection38{{"Connection[38∈0] ➊
ᐸ33ᐳ"}}:::plan - Constant436{{"Constant[436∈0] ➊
ᐸ1ᐳ"}}:::plan - Constant436 --> Connection38 + Constant536{{"Constant[536∈0] ➊
ᐸ1ᐳ"}}:::plan + Constant536 --> Connection38 Connection51{{"Connection[51∈0] ➊
ᐸ49ᐳ"}}:::plan - Constant437{{"Constant[437∈0] ➊
ᐸ2ᐳ"}}:::plan - Constant437 --> Connection51 + Constant537{{"Constant[537∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant537 --> Connection51 Connection69{{"Connection[69∈0] ➊
ᐸ64ᐳ"}}:::plan - Constant436 --> Connection69 + Constant536 --> Connection69 Connection104{{"Connection[104∈0] ➊
ᐸ99ᐳ"}}:::plan - Constant436 --> Connection104 + Constant536 --> Connection104 Connection126{{"Connection[126∈0] ➊
ᐸ124ᐳ"}}:::plan Connection145{{"Connection[145∈0] ➊
ᐸ140ᐳ"}}:::plan - Constant436 --> Connection145 + Constant536 --> Connection145 Connection182{{"Connection[182∈0] ➊
ᐸ177ᐳ"}}:::plan - Constant436 --> Connection182 + Constant536 --> Connection182 Connection202{{"Connection[202∈0] ➊
ᐸ200ᐳ"}}:::plan Connection213{{"Connection[213∈0] ➊
ᐸ211ᐳ"}}:::plan Connection238{{"Connection[238∈0] ➊
ᐸ236ᐳ"}}:::plan Connection252{{"Connection[252∈0] ➊
ᐸ248ᐳ"}}:::plan - Constant437 --> Connection252 + Constant537 --> Connection252 Connection270{{"Connection[270∈0] ➊
ᐸ265ᐳ"}}:::plan - Constant436 --> Connection270 + Constant536 --> Connection270 Connection305{{"Connection[305∈0] ➊
ᐸ300ᐳ"}}:::plan - Constant436 --> Connection305 + Constant536 --> Connection305 Connection327{{"Connection[327∈0] ➊
ᐸ325ᐳ"}}:::plan Connection346{{"Connection[346∈0] ➊
ᐸ341ᐳ"}}:::plan - Constant436 --> Connection346 + Constant536 --> Connection346 Connection383{{"Connection[383∈0] ➊
ᐸ378ᐳ"}}:::plan - Constant436 --> Connection383 + Constant536 --> Connection383 Connection403{{"Connection[403∈0] ➊
ᐸ401ᐳ"}}:::plan Connection414{{"Connection[414∈0] ➊
ᐸ412ᐳ"}}:::plan Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 __InputObject122{{"__InputObject[122∈0] ➊"}}:::plan - Constant438{{"Constant[438∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan - Constant438 --> __InputObject122 + Constant538{{"Constant[538∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan + Constant538 --> __InputObject122 __InputObject162{{"__InputObject[162∈0] ➊"}}:::plan - Constant438 --> __InputObject162 + Constant538 --> __InputObject162 __InputObject323{{"__InputObject[323∈0] ➊"}}:::plan - Constant438 --> __InputObject323 + Constant538 --> __InputObject323 __InputObject363{{"__InputObject[363∈0] ➊"}}:::plan - Constant438 --> __InputObject363 + Constant538 --> __InputObject363 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access8 __Value2 --> Access9 @@ -98,25 +102,47 @@ graph TD PgFromExpression394{{"PgFromExpression[394∈0] ➊"}}:::plan PgSelect129[["PgSelect[129∈1]
ᐸpostᐳ"]]:::plan PgClassExpression46{{"PgClassExpression[46∈1]
ᐸ__person__.”id”ᐳ"}}:::plan - Object10 & PgClassExpression46 & ApplyInput128 & Connection126 & PgFromExpression135 --> PgSelect129 - PgSelect24[["PgSelect[24∈1]
ᐸperson_friendsᐳ"]]:::plan - PgClassExpression15{{"PgClassExpression[15∈1]
ᐸ__person__ᐳ"}}:::plan - Object10 & PgClassExpression15 & PgFromExpression22 & Connection23 --> PgSelect24 + PgSelectInlineApply456["PgSelectInlineApply[456∈1] ➊"]:::plan + PgSelectInlineApply460["PgSelectInlineApply[460∈1] ➊"]:::plan + Object10 & PgClassExpression46 & ApplyInput128 & Connection126 & PgFromExpression135 & PgFromExpression144 & PgSelectInlineApply456 & PgFromExpression156 & PgSelectInlineApply460 --> PgSelect129 PgSelect53[["PgSelect[53∈1]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression46 & Connection51 & Constant437 & PgFromExpression59 --> PgSelect53 + PgSelectInlineApply440["PgSelectInlineApply[440∈1] ➊"]:::plan + PgSelectInlineApply444["PgSelectInlineApply[444∈1] ➊"]:::plan + Object10 & PgClassExpression46 & Connection51 & Constant537 & PgFromExpression59 & PgFromExpression68 & PgSelectInlineApply440 & PgFromExpression80 & PgSelectInlineApply444 --> PgSelect53 PgSelect164[["PgSelect[164∈1]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression46 & ApplyInput166 & PgFromExpression172 --> PgSelect164 - PgSelect204[["PgSelect[204∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression46 & Connection202 --> PgSelect204 - PgSelect215[["PgSelect[215∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression46 & Connection213 --> PgSelect215 + PgSelectInlineApply464["PgSelectInlineApply[464∈1] ➊"]:::plan + PgSelectInlineApply468["PgSelectInlineApply[468∈1] ➊"]:::plan + Object10 & PgClassExpression46 & ApplyInput166 & PgFromExpression172 & PgFromExpression181 & PgSelectInlineApply464 & PgFromExpression193 & PgSelectInlineApply468 --> PgSelect164 + PgSelect24[["PgSelect[24∈1]
ᐸperson_friendsᐳ"]]:::plan + PgClassExpression15{{"PgClassExpression[15∈1]
ᐸ__person__ᐳ"}}:::plan + PgSelectInlineApply436["PgSelectInlineApply[436∈1] ➊"]:::plan + Object10 & PgClassExpression15 & PgFromExpression22 & Connection23 & PgFromExpression37 & PgSelectInlineApply436 --> PgSelect24 PgSelect87[["PgSelect[87∈1]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression46 & Constant437 & PgFromExpression94 --> PgSelect87 - PgSelect221[["PgSelect[221∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression46 --> PgSelect221 - PgSelect228[["PgSelect[228∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression46 --> PgSelect228 + PgSelectInlineApply448["PgSelectInlineApply[448∈1] ➊"]:::plan + PgSelectInlineApply452["PgSelectInlineApply[452∈1] ➊"]:::plan + Object10 & PgClassExpression46 & Constant537 & PgFromExpression94 & PgFromExpression103 & PgSelectInlineApply448 & PgFromExpression115 & PgSelectInlineApply452 --> PgSelect87 + Constant536 --> PgSelectInlineApply436 + Constant536 --> PgSelectInlineApply440 + Constant536 --> PgSelectInlineApply448 + Constant536 --> PgSelectInlineApply456 + Constant536 --> PgSelectInlineApply464 + Constant536 --> PgSelectInlineApply444 + Constant536 --> PgSelectInlineApply452 + Constant536 --> PgSelectInlineApply460 + Constant536 --> PgSelectInlineApply468 + List474{{"List[474∈1]
ᐸ12,473ᐳ"}}:::plan __Item12[/"__Item[12∈1]
ᐸ11ᐳ"\]:::itemplan + Access473{{"Access[473∈1] ➊
ᐸ7.m.subqueryDetailsFor204ᐳ"}}:::plan + __Item12 & Access473 --> List474 + List478{{"List[478∈1]
ᐸ12,477ᐳ"}}:::plan + Access477{{"Access[477∈1] ➊
ᐸ7.m.subqueryDetailsFor215ᐳ"}}:::plan + __Item12 & Access477 --> List478 + List482{{"List[482∈1]
ᐸ12,481ᐳ"}}:::plan + Access481{{"Access[481∈1] ➊
ᐸ7.m.subqueryDetailsFor221ᐳ"}}:::plan + __Item12 & Access481 --> List482 + List486{{"List[486∈1]
ᐸ12,485ᐳ"}}:::plan + Access485{{"Access[485∈1] ➊
ᐸ7.m.subqueryDetailsFor228ᐳ"}}:::plan + __Item12 & Access485 --> List486 PgSelectRows11 ==> __Item12 PgSelectSingle13{{"PgSelectSingle[13∈1]
ᐸpersonᐳ"}}:::plan __Item12 --> PgSelectSingle13 @@ -137,27 +163,41 @@ graph TD PgSelectRows167[["PgSelectRows[167∈1]"]]:::plan PgSelect164 --> PgSelectRows167 PgSelectRows205[["PgSelectRows[205∈1]"]]:::plan - PgSelect204 --> PgSelectRows205 + Lambda475{{"Lambda[475∈1]"}}:::plan + Lambda475 --> PgSelectRows205 PgSelectRows216[["PgSelectRows[216∈1]"]]:::plan - PgSelect215 --> PgSelectRows216 + Lambda479{{"Lambda[479∈1]"}}:::plan + Lambda479 --> PgSelectRows216 PgSelectRows223[["PgSelectRows[223∈1]"]]:::plan - PgSelect221 --> PgSelectRows223 + Lambda483{{"Lambda[483∈1]"}}:::plan + Lambda483 --> PgSelectRows223 PgSelectRows230[["PgSelectRows[230∈1]"]]:::plan - PgSelect228 --> PgSelectRows230 + Lambda487{{"Lambda[487∈1]"}}:::plan + Lambda487 --> PgSelectRows230 + PgSelect7 --> Access473 + List474 --> Lambda475 + PgSelect7 --> Access477 + List478 --> Lambda479 + PgSelect7 --> Access481 + List482 --> Lambda483 + PgSelect7 --> Access485 + List486 --> Lambda487 __Item26[/"__Item[26∈2]
ᐸ25ᐳ"\]:::itemplan PgSelectRows25 ==> __Item26 PgSelectSingle27{{"PgSelectSingle[27∈2]
ᐸperson_friendsᐳ"}}:::plan __Item26 --> PgSelectSingle27 - PgSelect39[["PgSelect[39∈3]
ᐸperson_friendsᐳ"]]:::plan - PgClassExpression29{{"PgClassExpression[29∈3]
ᐸ__person_friends__ᐳ"}}:::plan - Object10 & PgClassExpression29 & PgFromExpression37 & Connection38 & Constant436 --> PgSelect39 + List438{{"List[438∈3]
ᐸ26,437ᐳ"}}:::plan + Access437{{"Access[437∈3]
ᐸ24.m.subqueryDetailsFor39ᐳ"}}:::plan + __Item26 & Access437 --> List438 PgClassExpression28{{"PgClassExpression[28∈3]
ᐸ__person_f...full_name”ᐳ"}}:::plan PgSelectSingle27 --> PgClassExpression28 - PgSelectSingle27 --> PgClassExpression29 PgClassExpression30{{"PgClassExpression[30∈3]
ᐸ”c”.”perso...friends__)ᐳ"}}:::plan PgSelectSingle27 --> PgClassExpression30 PgSelectRows40[["PgSelectRows[40∈3]"]]:::plan - PgSelect39 --> PgSelectRows40 + Lambda439{{"Lambda[439∈3]"}}:::plan + Lambda439 --> PgSelectRows40 + PgSelect24 --> Access437 + List438 --> Lambda439 __Item41[/"__Item[41∈4]
ᐸ40ᐳ"\]:::itemplan PgSelectRows40 ==> __Item41 PgSelectSingle42{{"PgSelectSingle[42∈4]
ᐸperson_friendsᐳ"}}:::plan @@ -170,22 +210,28 @@ graph TD PgSelectRows54 ==> __Item55 PgSelectSingle56{{"PgSelectSingle[56∈6]
ᐸpostᐳ"}}:::plan __Item55 --> PgSelectSingle56 - PgSelect70[["PgSelect[70∈7]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression58{{"PgClassExpression[58∈7]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression58 & PgFromExpression68 & Connection69 & Constant436 --> PgSelect70 - PgSelect78[["PgSelect[78∈7]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression58 & PgFromExpression80 & Constant436 --> PgSelect78 + List442{{"List[442∈7]
ᐸ55,441ᐳ"}}:::plan + Access441{{"Access[441∈7]
ᐸ53.m.subqueryDetailsFor70ᐳ"}}:::plan + __Item55 & Access441 --> List442 + List446{{"List[446∈7]
ᐸ55,445ᐳ"}}:::plan + Access445{{"Access[445∈7]
ᐸ53.m.subqueryDetailsFor78ᐳ"}}:::plan + __Item55 & Access445 --> List446 PgClassExpression57{{"PgClassExpression[57∈7]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle56 --> PgClassExpression57 - PgSelectSingle56 --> PgClassExpression58 PgClassExpression60{{"PgClassExpression[60∈7]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle56 --> PgClassExpression60 PgClassExpression61{{"PgClassExpression[61∈7]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle56 --> PgClassExpression61 PgSelectRows71[["PgSelectRows[71∈7]"]]:::plan - PgSelect70 --> PgSelectRows71 + Lambda443{{"Lambda[443∈7]"}}:::plan + Lambda443 --> PgSelectRows71 PgSelectRows81[["PgSelectRows[81∈7]"]]:::plan - PgSelect78 --> PgSelectRows81 + Lambda447{{"Lambda[447∈7]"}}:::plan + Lambda447 --> PgSelectRows81 + PgSelect53 --> Access441 + List442 --> Lambda443 + PgSelect53 --> Access445 + List446 --> Lambda447 __Item72[/"__Item[72∈8]
ᐸ71ᐳ"\]:::itemplan PgSelectRows71 ==> __Item72 PgSelectSingle73{{"PgSelectSingle[73∈8]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -198,26 +244,32 @@ graph TD __Item82 --> PgSelectSingle83 PgClassExpression84{{"PgClassExpression[84∈10]
ᐸ__post_com...al_set__.vᐳ"}}:::plan PgSelectSingle83 --> PgClassExpression84 - PgSelect105[["PgSelect[105∈12]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression93{{"PgClassExpression[93∈12]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression93 & PgFromExpression103 & Connection104 & Constant436 --> PgSelect105 - PgSelect113[["PgSelect[113∈12]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression93 & PgFromExpression115 & Constant436 --> PgSelect113 + List450{{"List[450∈12]
ᐸ90,449ᐳ"}}:::plan __Item90[/"__Item[90∈12]
ᐸ89ᐳ"\]:::itemplan + Access449{{"Access[449∈12]
ᐸ87.m.subqueryDetailsFor105ᐳ"}}:::plan + __Item90 & Access449 --> List450 + List454{{"List[454∈12]
ᐸ90,453ᐳ"}}:::plan + Access453{{"Access[453∈12]
ᐸ87.m.subqueryDetailsFor113ᐳ"}}:::plan + __Item90 & Access453 --> List454 PgSelectRows89 ==> __Item90 PgSelectSingle91{{"PgSelectSingle[91∈12]
ᐸpostᐳ"}}:::plan __Item90 --> PgSelectSingle91 PgClassExpression92{{"PgClassExpression[92∈12]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle91 --> PgClassExpression92 - PgSelectSingle91 --> PgClassExpression93 PgClassExpression95{{"PgClassExpression[95∈12]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle91 --> PgClassExpression95 PgClassExpression96{{"PgClassExpression[96∈12]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle91 --> PgClassExpression96 PgSelectRows106[["PgSelectRows[106∈12]"]]:::plan - PgSelect105 --> PgSelectRows106 + Lambda451{{"Lambda[451∈12]"}}:::plan + Lambda451 --> PgSelectRows106 PgSelectRows116[["PgSelectRows[116∈12]"]]:::plan - PgSelect113 --> PgSelectRows116 + Lambda455{{"Lambda[455∈12]"}}:::plan + Lambda455 --> PgSelectRows116 + PgSelect87 --> Access449 + List450 --> Lambda451 + PgSelect87 --> Access453 + List454 --> Lambda455 __Item107[/"__Item[107∈13]
ᐸ106ᐳ"\]:::itemplan PgSelectRows106 ==> __Item107 PgSelectSingle108{{"PgSelectSingle[108∈13]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -234,22 +286,28 @@ graph TD PgSelectRows130 ==> __Item131 PgSelectSingle132{{"PgSelectSingle[132∈17]
ᐸpostᐳ"}}:::plan __Item131 --> PgSelectSingle132 - PgSelect146[["PgSelect[146∈18]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression134{{"PgClassExpression[134∈18]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression134 & PgFromExpression144 & Connection145 & Constant436 --> PgSelect146 - PgSelect154[["PgSelect[154∈18]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression134 & PgFromExpression156 & Constant436 --> PgSelect154 + List458{{"List[458∈18]
ᐸ131,457ᐳ"}}:::plan + Access457{{"Access[457∈18]
ᐸ129.m.subqueryDetailsFor146ᐳ"}}:::plan + __Item131 & Access457 --> List458 + List462{{"List[462∈18]
ᐸ131,461ᐳ"}}:::plan + Access461{{"Access[461∈18]
ᐸ129.m.subqueryDetailsFor154ᐳ"}}:::plan + __Item131 & Access461 --> List462 PgClassExpression133{{"PgClassExpression[133∈18]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle132 --> PgClassExpression133 - PgSelectSingle132 --> PgClassExpression134 PgClassExpression136{{"PgClassExpression[136∈18]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle132 --> PgClassExpression136 PgClassExpression137{{"PgClassExpression[137∈18]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle132 --> PgClassExpression137 PgSelectRows147[["PgSelectRows[147∈18]"]]:::plan - PgSelect146 --> PgSelectRows147 + Lambda459{{"Lambda[459∈18]"}}:::plan + Lambda459 --> PgSelectRows147 PgSelectRows157[["PgSelectRows[157∈18]"]]:::plan - PgSelect154 --> PgSelectRows157 + Lambda463{{"Lambda[463∈18]"}}:::plan + Lambda463 --> PgSelectRows157 + PgSelect129 --> Access457 + List458 --> Lambda459 + PgSelect129 --> Access461 + List462 --> Lambda463 __Item148[/"__Item[148∈19]
ᐸ147ᐳ"\]:::itemplan PgSelectRows147 ==> __Item148 PgSelectSingle149{{"PgSelectSingle[149∈19]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -262,26 +320,32 @@ graph TD __Item158 --> PgSelectSingle159 PgClassExpression160{{"PgClassExpression[160∈21]
ᐸ__post_com...al_set__.vᐳ"}}:::plan PgSelectSingle159 --> PgClassExpression160 - PgSelect183[["PgSelect[183∈23]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression171{{"PgClassExpression[171∈23]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression171 & PgFromExpression181 & Connection182 & Constant436 --> PgSelect183 - PgSelect191[["PgSelect[191∈23]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression171 & PgFromExpression193 & Constant436 --> PgSelect191 + List466{{"List[466∈23]
ᐸ168,465ᐳ"}}:::plan __Item168[/"__Item[168∈23]
ᐸ167ᐳ"\]:::itemplan + Access465{{"Access[465∈23]
ᐸ164.m.subqueryDetailsFor183ᐳ"}}:::plan + __Item168 & Access465 --> List466 + List470{{"List[470∈23]
ᐸ168,469ᐳ"}}:::plan + Access469{{"Access[469∈23]
ᐸ164.m.subqueryDetailsFor191ᐳ"}}:::plan + __Item168 & Access469 --> List470 PgSelectRows167 ==> __Item168 PgSelectSingle169{{"PgSelectSingle[169∈23]
ᐸpostᐳ"}}:::plan __Item168 --> PgSelectSingle169 PgClassExpression170{{"PgClassExpression[170∈23]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle169 --> PgClassExpression170 - PgSelectSingle169 --> PgClassExpression171 PgClassExpression173{{"PgClassExpression[173∈23]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle169 --> PgClassExpression173 PgClassExpression174{{"PgClassExpression[174∈23]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle169 --> PgClassExpression174 PgSelectRows184[["PgSelectRows[184∈23]"]]:::plan - PgSelect183 --> PgSelectRows184 + Lambda467{{"Lambda[467∈23]"}}:::plan + Lambda467 --> PgSelectRows184 PgSelectRows194[["PgSelectRows[194∈23]"]]:::plan - PgSelect191 --> PgSelectRows194 + Lambda471{{"Lambda[471∈23]"}}:::plan + Lambda471 --> PgSelectRows194 + PgSelect164 --> Access465 + List466 --> Lambda467 + PgSelect164 --> Access469 + List470 --> Lambda471 __Item185[/"__Item[185∈24]
ᐸ184ᐳ"\]:::itemplan PgSelectRows184 ==> __Item185 PgSelectSingle186{{"PgSelectSingle[186∈24]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -327,7 +391,11 @@ graph TD PgClassExpression234{{"PgClassExpression[234∈33]
ᐸ__compound...rson_id_2”ᐳ"}}:::plan PgSelectSingle232 --> PgClassExpression234 PgSelect240[["PgSelect[240∈34] ➊
ᐸpersonᐳ"]]:::plan - Object10 & Connection238 --> PgSelect240 + PgSelectInlineApply520["PgSelectInlineApply[520∈34] ➊"]:::plan + PgSelectInlineApply524["PgSelectInlineApply[524∈34] ➊"]:::plan + PgSelectInlineApply528["PgSelectInlineApply[528∈34] ➊"]:::plan + PgSelectInlineApply532["PgSelectInlineApply[532∈34] ➊"]:::plan + Object10 & Connection238 & PgSelectInlineApply520 & PgSelectInlineApply524 & PgSelectInlineApply528 & PgSelectInlineApply532 --> PgSelect240 PgSelectRows241[["PgSelectRows[241∈34] ➊"]]:::plan PgSelect240 --> PgSelectRows241 __Item242[/"__Item[242∈35]
ᐸ241ᐳ"\]:::itemplan @@ -336,21 +404,41 @@ graph TD __Item242 --> PgSelectSingle243 PgSelect330[["PgSelect[330∈36]
ᐸpostᐳ"]]:::plan PgClassExpression244{{"PgClassExpression[244∈36]
ᐸ__person__.”id”ᐳ"}}:::plan - Object10 & PgClassExpression244 & ApplyInput329 & Connection327 & PgFromExpression336 --> PgSelect330 + PgSelectInlineApply504["PgSelectInlineApply[504∈36] ➊"]:::plan + PgSelectInlineApply508["PgSelectInlineApply[508∈36] ➊"]:::plan + Object10 & PgClassExpression244 & ApplyInput329 & Connection327 & PgFromExpression336 & PgFromExpression345 & PgSelectInlineApply504 & PgFromExpression357 & PgSelectInlineApply508 --> PgSelect330 PgSelect254[["PgSelect[254∈36]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression244 & Connection252 & Constant437 & PgFromExpression260 --> PgSelect254 + PgSelectInlineApply488["PgSelectInlineApply[488∈36] ➊"]:::plan + PgSelectInlineApply492["PgSelectInlineApply[492∈36] ➊"]:::plan + Object10 & PgClassExpression244 & Connection252 & Constant537 & PgFromExpression260 & PgFromExpression269 & PgSelectInlineApply488 & PgFromExpression281 & PgSelectInlineApply492 --> PgSelect254 PgSelect365[["PgSelect[365∈36]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression244 & ApplyInput367 & PgFromExpression373 --> PgSelect365 - PgSelect405[["PgSelect[405∈36]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression244 & Connection403 --> PgSelect405 - PgSelect416[["PgSelect[416∈36]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression244 & Connection414 --> PgSelect416 + PgSelectInlineApply512["PgSelectInlineApply[512∈36] ➊"]:::plan + PgSelectInlineApply516["PgSelectInlineApply[516∈36] ➊"]:::plan + Object10 & PgClassExpression244 & ApplyInput367 & PgFromExpression373 & PgFromExpression382 & PgSelectInlineApply512 & PgFromExpression394 & PgSelectInlineApply516 --> PgSelect365 PgSelect288[["PgSelect[288∈36]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression244 & Constant437 & PgFromExpression295 --> PgSelect288 - PgSelect422[["PgSelect[422∈36]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression244 --> PgSelect422 - PgSelect429[["PgSelect[429∈36]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression244 --> PgSelect429 + PgSelectInlineApply496["PgSelectInlineApply[496∈36] ➊"]:::plan + PgSelectInlineApply500["PgSelectInlineApply[500∈36] ➊"]:::plan + Object10 & PgClassExpression244 & Constant537 & PgFromExpression295 & PgFromExpression304 & PgSelectInlineApply496 & PgFromExpression316 & PgSelectInlineApply500 --> PgSelect288 + Constant536 --> PgSelectInlineApply488 + Constant536 --> PgSelectInlineApply496 + Constant536 --> PgSelectInlineApply504 + Constant536 --> PgSelectInlineApply512 + Constant536 --> PgSelectInlineApply492 + Constant536 --> PgSelectInlineApply500 + Constant536 --> PgSelectInlineApply508 + Constant536 --> PgSelectInlineApply516 + List522{{"List[522∈36]
ᐸ242,521ᐳ"}}:::plan + Access521{{"Access[521∈36] ➊
ᐸ240.m.subqueryDetailsFor405ᐳ"}}:::plan + __Item242 & Access521 --> List522 + List526{{"List[526∈36]
ᐸ242,525ᐳ"}}:::plan + Access525{{"Access[525∈36] ➊
ᐸ240.m.subqueryDetailsFor416ᐳ"}}:::plan + __Item242 & Access525 --> List526 + List530{{"List[530∈36]
ᐸ242,529ᐳ"}}:::plan + Access529{{"Access[529∈36] ➊
ᐸ240.m.subqueryDetailsFor422ᐳ"}}:::plan + __Item242 & Access529 --> List530 + List534{{"List[534∈36]
ᐸ242,533ᐳ"}}:::plan + Access533{{"Access[533∈36] ➊
ᐸ240.m.subqueryDetailsFor429ᐳ"}}:::plan + __Item242 & Access533 --> List534 PgSelectSingle243 --> PgClassExpression244 PgClassExpression245{{"PgClassExpression[245∈36]
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle243 --> PgClassExpression245 @@ -363,33 +451,51 @@ graph TD PgSelectRows368[["PgSelectRows[368∈36]"]]:::plan PgSelect365 --> PgSelectRows368 PgSelectRows406[["PgSelectRows[406∈36]"]]:::plan - PgSelect405 --> PgSelectRows406 + Lambda523{{"Lambda[523∈36]"}}:::plan + Lambda523 --> PgSelectRows406 PgSelectRows417[["PgSelectRows[417∈36]"]]:::plan - PgSelect416 --> PgSelectRows417 + Lambda527{{"Lambda[527∈36]"}}:::plan + Lambda527 --> PgSelectRows417 PgSelectRows424[["PgSelectRows[424∈36]"]]:::plan - PgSelect422 --> PgSelectRows424 + Lambda531{{"Lambda[531∈36]"}}:::plan + Lambda531 --> PgSelectRows424 PgSelectRows431[["PgSelectRows[431∈36]"]]:::plan - PgSelect429 --> PgSelectRows431 + Lambda535{{"Lambda[535∈36]"}}:::plan + Lambda535 --> PgSelectRows431 + PgSelect240 --> Access521 + List522 --> Lambda523 + PgSelect240 --> Access525 + List526 --> Lambda527 + PgSelect240 --> Access529 + List530 --> Lambda531 + PgSelect240 --> Access533 + List534 --> Lambda535 __Item256[/"__Item[256∈37]
ᐸ255ᐳ"\]:::itemplan PgSelectRows255 ==> __Item256 PgSelectSingle257{{"PgSelectSingle[257∈37]
ᐸpostᐳ"}}:::plan __Item256 --> PgSelectSingle257 - PgSelect271[["PgSelect[271∈38]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression259{{"PgClassExpression[259∈38]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression259 & PgFromExpression269 & Connection270 & Constant436 --> PgSelect271 - PgSelect279[["PgSelect[279∈38]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression259 & PgFromExpression281 & Constant436 --> PgSelect279 + List490{{"List[490∈38]
ᐸ256,489ᐳ"}}:::plan + Access489{{"Access[489∈38]
ᐸ254.m.subqueryDetailsFor271ᐳ"}}:::plan + __Item256 & Access489 --> List490 + List494{{"List[494∈38]
ᐸ256,493ᐳ"}}:::plan + Access493{{"Access[493∈38]
ᐸ254.m.subqueryDetailsFor279ᐳ"}}:::plan + __Item256 & Access493 --> List494 PgClassExpression258{{"PgClassExpression[258∈38]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle257 --> PgClassExpression258 - PgSelectSingle257 --> PgClassExpression259 PgClassExpression261{{"PgClassExpression[261∈38]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle257 --> PgClassExpression261 PgClassExpression262{{"PgClassExpression[262∈38]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle257 --> PgClassExpression262 PgSelectRows272[["PgSelectRows[272∈38]"]]:::plan - PgSelect271 --> PgSelectRows272 + Lambda491{{"Lambda[491∈38]"}}:::plan + Lambda491 --> PgSelectRows272 PgSelectRows282[["PgSelectRows[282∈38]"]]:::plan - PgSelect279 --> PgSelectRows282 + Lambda495{{"Lambda[495∈38]"}}:::plan + Lambda495 --> PgSelectRows282 + PgSelect254 --> Access489 + List490 --> Lambda491 + PgSelect254 --> Access493 + List494 --> Lambda495 __Item273[/"__Item[273∈39]
ᐸ272ᐳ"\]:::itemplan PgSelectRows272 ==> __Item273 PgSelectSingle274{{"PgSelectSingle[274∈39]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -402,26 +508,32 @@ graph TD __Item283 --> PgSelectSingle284 PgClassExpression285{{"PgClassExpression[285∈41]
ᐸ__post_com...al_set__.vᐳ"}}:::plan PgSelectSingle284 --> PgClassExpression285 - PgSelect306[["PgSelect[306∈43]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression294{{"PgClassExpression[294∈43]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression294 & PgFromExpression304 & Connection305 & Constant436 --> PgSelect306 - PgSelect314[["PgSelect[314∈43]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression294 & PgFromExpression316 & Constant436 --> PgSelect314 + List498{{"List[498∈43]
ᐸ291,497ᐳ"}}:::plan __Item291[/"__Item[291∈43]
ᐸ290ᐳ"\]:::itemplan + Access497{{"Access[497∈43]
ᐸ288.m.subqueryDetailsFor306ᐳ"}}:::plan + __Item291 & Access497 --> List498 + List502{{"List[502∈43]
ᐸ291,501ᐳ"}}:::plan + Access501{{"Access[501∈43]
ᐸ288.m.subqueryDetailsFor314ᐳ"}}:::plan + __Item291 & Access501 --> List502 PgSelectRows290 ==> __Item291 PgSelectSingle292{{"PgSelectSingle[292∈43]
ᐸpostᐳ"}}:::plan __Item291 --> PgSelectSingle292 PgClassExpression293{{"PgClassExpression[293∈43]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle292 --> PgClassExpression293 - PgSelectSingle292 --> PgClassExpression294 PgClassExpression296{{"PgClassExpression[296∈43]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle292 --> PgClassExpression296 PgClassExpression297{{"PgClassExpression[297∈43]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle292 --> PgClassExpression297 PgSelectRows307[["PgSelectRows[307∈43]"]]:::plan - PgSelect306 --> PgSelectRows307 + Lambda499{{"Lambda[499∈43]"}}:::plan + Lambda499 --> PgSelectRows307 PgSelectRows317[["PgSelectRows[317∈43]"]]:::plan - PgSelect314 --> PgSelectRows317 + Lambda503{{"Lambda[503∈43]"}}:::plan + Lambda503 --> PgSelectRows317 + PgSelect288 --> Access497 + List498 --> Lambda499 + PgSelect288 --> Access501 + List502 --> Lambda503 __Item308[/"__Item[308∈44]
ᐸ307ᐳ"\]:::itemplan PgSelectRows307 ==> __Item308 PgSelectSingle309{{"PgSelectSingle[309∈44]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -438,22 +550,28 @@ graph TD PgSelectRows331 ==> __Item332 PgSelectSingle333{{"PgSelectSingle[333∈48]
ᐸpostᐳ"}}:::plan __Item332 --> PgSelectSingle333 - PgSelect347[["PgSelect[347∈49]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression335{{"PgClassExpression[335∈49]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression335 & PgFromExpression345 & Connection346 & Constant436 --> PgSelect347 - PgSelect355[["PgSelect[355∈49]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression335 & PgFromExpression357 & Constant436 --> PgSelect355 + List506{{"List[506∈49]
ᐸ332,505ᐳ"}}:::plan + Access505{{"Access[505∈49]
ᐸ330.m.subqueryDetailsFor347ᐳ"}}:::plan + __Item332 & Access505 --> List506 + List510{{"List[510∈49]
ᐸ332,509ᐳ"}}:::plan + Access509{{"Access[509∈49]
ᐸ330.m.subqueryDetailsFor355ᐳ"}}:::plan + __Item332 & Access509 --> List510 PgClassExpression334{{"PgClassExpression[334∈49]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle333 --> PgClassExpression334 - PgSelectSingle333 --> PgClassExpression335 PgClassExpression337{{"PgClassExpression[337∈49]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle333 --> PgClassExpression337 PgClassExpression338{{"PgClassExpression[338∈49]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle333 --> PgClassExpression338 PgSelectRows348[["PgSelectRows[348∈49]"]]:::plan - PgSelect347 --> PgSelectRows348 + Lambda507{{"Lambda[507∈49]"}}:::plan + Lambda507 --> PgSelectRows348 PgSelectRows358[["PgSelectRows[358∈49]"]]:::plan - PgSelect355 --> PgSelectRows358 + Lambda511{{"Lambda[511∈49]"}}:::plan + Lambda511 --> PgSelectRows358 + PgSelect330 --> Access505 + List506 --> Lambda507 + PgSelect330 --> Access509 + List510 --> Lambda511 __Item349[/"__Item[349∈50]
ᐸ348ᐳ"\]:::itemplan PgSelectRows348 ==> __Item349 PgSelectSingle350{{"PgSelectSingle[350∈50]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -466,26 +584,32 @@ graph TD __Item359 --> PgSelectSingle360 PgClassExpression361{{"PgClassExpression[361∈52]
ᐸ__post_com...al_set__.vᐳ"}}:::plan PgSelectSingle360 --> PgClassExpression361 - PgSelect384[["PgSelect[384∈54]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression372{{"PgClassExpression[372∈54]
ᐸ__post__ᐳ"}}:::plan - Object10 & PgClassExpression372 & PgFromExpression382 & Connection383 & Constant436 --> PgSelect384 - PgSelect392[["PgSelect[392∈54]
ᐸpost_computed_interval_setᐳ"]]:::plan - Object10 & PgClassExpression372 & PgFromExpression394 & Constant436 --> PgSelect392 + List514{{"List[514∈54]
ᐸ369,513ᐳ"}}:::plan __Item369[/"__Item[369∈54]
ᐸ368ᐳ"\]:::itemplan + Access513{{"Access[513∈54]
ᐸ365.m.subqueryDetailsFor384ᐳ"}}:::plan + __Item369 & Access513 --> List514 + List518{{"List[518∈54]
ᐸ369,517ᐳ"}}:::plan + Access517{{"Access[517∈54]
ᐸ365.m.subqueryDetailsFor392ᐳ"}}:::plan + __Item369 & Access517 --> List518 PgSelectRows368 ==> __Item369 PgSelectSingle370{{"PgSelectSingle[370∈54]
ᐸpostᐳ"}}:::plan __Item369 --> PgSelectSingle370 PgClassExpression371{{"PgClassExpression[371∈54]
ᐸ__post__.”headline”ᐳ"}}:::plan PgSelectSingle370 --> PgClassExpression371 - PgSelectSingle370 --> PgClassExpression372 PgClassExpression374{{"PgClassExpression[374∈54]
ᐸ(1/0) /* E...ferred! */ᐳ"}}:::plan PgSelectSingle370 --> PgClassExpression374 PgClassExpression375{{"PgClassExpression[375∈54]
ᐸ__post__.”author_id”ᐳ"}}:::plan PgSelectSingle370 --> PgClassExpression375 PgSelectRows385[["PgSelectRows[385∈54]"]]:::plan - PgSelect384 --> PgSelectRows385 + Lambda515{{"Lambda[515∈54]"}}:::plan + Lambda515 --> PgSelectRows385 PgSelectRows395[["PgSelectRows[395∈54]"]]:::plan - PgSelect392 --> PgSelectRows395 + Lambda519{{"Lambda[519∈54]"}}:::plan + Lambda519 --> PgSelectRows395 + PgSelect365 --> Access513 + List514 --> Lambda515 + PgSelect365 --> Access517 + List518 --> Lambda519 __Item386[/"__Item[386∈55]
ᐸ385ᐳ"\]:::itemplan PgSelectRows385 ==> __Item386 PgSelectSingle387{{"PgSelectSingle[387∈55]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -534,30 +658,30 @@ graph TD %% define steps subgraph "Buckets for queries/v4/simple-procedure-computed-fields" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 8, 9, 22, 37, 68, 80, 103, 115, 144, 156, 181, 193, 269, 281, 304, 316, 345, 357, 382, 394, 436, 437, 438, 10, 23, 38, 51, 59, 69, 94, 104, 122, 126, 128, 135, 145, 162, 166, 172, 182, 202, 213, 238, 252, 260, 270, 295, 305, 323, 327, 329, 336, 346, 363, 367, 373, 383, 403, 414
2: PgSelect[7]
3: PgSelectRows[11]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 8, 9, 22, 37, 68, 80, 103, 115, 144, 156, 181, 193, 269, 281, 304, 316, 345, 357, 382, 394, 536, 537, 538, 10, 23, 38, 51, 59, 69, 94, 104, 122, 126, 128, 135, 145, 162, 166, 172, 182, 202, 213, 238, 252, 260, 270, 295, 305, 323, 327, 329, 336, 346, 363, 367, 373, 383, 403, 414
2: 472, 476, 480, 484
3: PgSelect[7]
4: PgSelectRows[11]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,PgFromExpression22,Connection23,PgFromExpression37,Connection38,Connection51,PgFromExpression59,PgFromExpression68,Connection69,PgFromExpression80,PgFromExpression94,PgFromExpression103,Connection104,PgFromExpression115,__InputObject122,Connection126,ApplyInput128,PgFromExpression135,PgFromExpression144,Connection145,PgFromExpression156,__InputObject162,ApplyInput166,PgFromExpression172,PgFromExpression181,Connection182,PgFromExpression193,Connection202,Connection213,Connection238,Connection252,PgFromExpression260,PgFromExpression269,Connection270,PgFromExpression281,PgFromExpression295,PgFromExpression304,Connection305,PgFromExpression316,__InputObject323,Connection327,ApplyInput329,PgFromExpression336,PgFromExpression345,Connection346,PgFromExpression357,__InputObject363,ApplyInput367,PgFromExpression373,PgFromExpression382,Connection383,PgFromExpression394,Connection403,Connection414,Constant436,Constant437,Constant438 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 10, 22, 23, 6, 51, 437, 59, 94, 128, 126, 135, 166, 172, 202, 213, 37, 38, 436, 68, 69, 80, 103, 104, 115, 144, 145, 156, 181, 182, 193

ROOT __Item{1}ᐸ11ᐳ[12]
1:
ᐳ: 13, 14, 15, 16, 46
2: 24, 53, 87, 129, 164, 204, 215, 221, 228
3: 25, 54, 89, 130, 167, 205, 216, 223, 230"):::bucket + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,PgFromExpression22,Connection23,PgFromExpression37,Connection38,Connection51,PgFromExpression59,PgFromExpression68,Connection69,PgFromExpression80,PgFromExpression94,PgFromExpression103,Connection104,PgFromExpression115,__InputObject122,Connection126,ApplyInput128,PgFromExpression135,PgFromExpression144,Connection145,PgFromExpression156,__InputObject162,ApplyInput166,PgFromExpression172,PgFromExpression181,Connection182,PgFromExpression193,Connection202,Connection213,Connection238,Connection252,PgFromExpression260,PgFromExpression269,Connection270,PgFromExpression281,PgFromExpression295,PgFromExpression304,Connection305,PgFromExpression316,__InputObject323,Connection327,ApplyInput329,PgFromExpression336,PgFromExpression345,Connection346,PgFromExpression357,__InputObject363,ApplyInput367,PgFromExpression373,PgFromExpression382,Connection383,PgFromExpression394,Connection403,Connection414,PgSelectInlineApply472,PgSelectInlineApply476,PgSelectInlineApply480,PgSelectInlineApply484,Constant536,Constant537,Constant538 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 10, 22, 23, 6, 37, 51, 537, 59, 68, 80, 94, 103, 115, 128, 126, 135, 144, 156, 166, 172, 181, 193, 536, 7, 38, 69, 104, 145, 182, 202, 213

ROOT __Item{1}ᐸ11ᐳ[12]
1: 436, 440, 444, 448, 452, 456, 460, 464, 468
ᐳ: 13, 473, 477, 481, 485, 14, 15, 16, 46, 474, 475, 478, 479, 482, 483, 486, 487
2: 24, 53, 87, 129, 164, 205, 216, 223, 230
3: 25, 54, 89, 130, 167"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgClassExpression16,PgSelect24,PgSelectRows25,PgClassExpression46,PgSelect53,PgSelectRows54,PgSelect87,PgSelectRows89,PgSelect129,PgSelectRows130,PgSelect164,PgSelectRows167,PgSelect204,PgSelectRows205,PgSelect215,PgSelectRows216,PgSelect221,PgSelectRows223,PgSelect228,PgSelectRows230 bucket1 - Bucket2("Bucket 2 (listItem)
Deps: 10, 37, 38, 436, 6

ROOT __Item{2}ᐸ25ᐳ[26]"):::bucket + class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgClassExpression16,PgSelect24,PgSelectRows25,PgClassExpression46,PgSelect53,PgSelectRows54,PgSelect87,PgSelectRows89,PgSelect129,PgSelectRows130,PgSelect164,PgSelectRows167,PgSelectRows205,PgSelectRows216,PgSelectRows223,PgSelectRows230,PgSelectInlineApply436,PgSelectInlineApply440,PgSelectInlineApply444,PgSelectInlineApply448,PgSelectInlineApply452,PgSelectInlineApply456,PgSelectInlineApply460,PgSelectInlineApply464,PgSelectInlineApply468,Access473,List474,Lambda475,Access477,List478,Lambda479,Access481,List482,Lambda483,Access485,List486,Lambda487 bucket1 + Bucket2("Bucket 2 (listItem)
Deps: 24, 38

ROOT __Item{2}ᐸ25ᐳ[26]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item26,PgSelectSingle27 bucket2 - Bucket3("Bucket 3 (nullableBoundary)
Deps: 27, 10, 37, 38, 436, 6

ROOT PgSelectSingle{2}ᐸperson_friendsᐳ[27]
1:
ᐳ: 28, 29, 30
2: PgSelect[39]
3: PgSelectRows[40]"):::bucket + Bucket3("Bucket 3 (nullableBoundary)
Deps: 27, 24, 26, 38

ROOT PgSelectSingle{2}ᐸperson_friendsᐳ[27]
1:
ᐳ: 28, 30, 437, 438, 439
2: PgSelectRows[40]"):::bucket classDef bucket3 stroke:#ffa500 - class Bucket3,PgClassExpression28,PgClassExpression29,PgClassExpression30,PgSelect39,PgSelectRows40 bucket3 + class Bucket3,PgClassExpression28,PgClassExpression30,PgSelectRows40,Access437,List438,Lambda439 bucket3 Bucket4("Bucket 4 (listItem)

ROOT __Item{4}ᐸ40ᐳ[41]"):::bucket classDef bucket4 stroke:#0000ff class Bucket4,__Item41,PgSelectSingle42 bucket4 Bucket5("Bucket 5 (nullableBoundary)
Deps: 42

ROOT PgSelectSingle{4}ᐸperson_friendsᐳ[42]"):::bucket classDef bucket5 stroke:#7fff00 class Bucket5,PgClassExpression43,PgClassExpression45 bucket5 - Bucket6("Bucket 6 (listItem)
Deps: 10, 68, 69, 436, 6, 80

ROOT __Item{6}ᐸ54ᐳ[55]"):::bucket + Bucket6("Bucket 6 (listItem)
Deps: 53, 69

ROOT __Item{6}ᐸ54ᐳ[55]"):::bucket classDef bucket6 stroke:#ff1493 class Bucket6,__Item55,PgSelectSingle56 bucket6 - Bucket7("Bucket 7 (nullableBoundary)
Deps: 56, 10, 68, 69, 436, 6, 80

ROOT PgSelectSingle{6}ᐸpostᐳ[56]
1:
ᐳ: 57, 58, 60, 61
2: PgSelect[70], PgSelect[78]
3: PgSelectRows[71], PgSelectRows[81]"):::bucket + Bucket7("Bucket 7 (nullableBoundary)
Deps: 56, 53, 55, 69

ROOT PgSelectSingle{6}ᐸpostᐳ[56]
1:
ᐳ: 57, 60, 61, 441, 445, 442, 443, 446, 447
2: PgSelectRows[71], PgSelectRows[81]"):::bucket classDef bucket7 stroke:#808000 - class Bucket7,PgClassExpression57,PgClassExpression58,PgClassExpression60,PgClassExpression61,PgSelect70,PgSelectRows71,PgSelect78,PgSelectRows81 bucket7 + class Bucket7,PgClassExpression57,PgClassExpression60,PgClassExpression61,PgSelectRows71,PgSelectRows81,Access441,List442,Lambda443,Access445,List446,Lambda447 bucket7 Bucket8("Bucket 8 (listItem)

ROOT __Item{8}ᐸ71ᐳ[72]"):::bucket classDef bucket8 stroke:#dda0dd class Bucket8,__Item72,PgSelectSingle73,PgClassExpression74 bucket8 @@ -570,9 +694,9 @@ graph TD Bucket11("Bucket 11 (nullableBoundary)
Deps: 84

ROOT PgClassExpression{10}ᐸ__post_com...al_set__.vᐳ[84]"):::bucket classDef bucket11 stroke:#00ffff class Bucket11 bucket11 - Bucket12("Bucket 12 (listItem)
Deps: 10, 103, 104, 436, 6, 115

ROOT __Item{12}ᐸ89ᐳ[90]
1:
ᐳ: 91, 92, 93, 95, 96
2: PgSelect[105], PgSelect[113]
3: PgSelectRows[106], PgSelectRows[116]"):::bucket + Bucket12("Bucket 12 (listItem)
Deps: 87, 104

ROOT __Item{12}ᐸ89ᐳ[90]
1:
ᐳ: 91, 449, 453, 92, 95, 96, 450, 451, 454, 455
2: PgSelectRows[106], PgSelectRows[116]"):::bucket classDef bucket12 stroke:#4169e1 - class Bucket12,__Item90,PgSelectSingle91,PgClassExpression92,PgClassExpression93,PgClassExpression95,PgClassExpression96,PgSelect105,PgSelectRows106,PgSelect113,PgSelectRows116 bucket12 + class Bucket12,__Item90,PgSelectSingle91,PgClassExpression92,PgClassExpression95,PgClassExpression96,PgSelectRows106,PgSelectRows116,Access449,List450,Lambda451,Access453,List454,Lambda455 bucket12 Bucket13("Bucket 13 (listItem)

ROOT __Item{13}ᐸ106ᐳ[107]"):::bucket classDef bucket13 stroke:#3cb371 class Bucket13,__Item107,PgSelectSingle108,PgClassExpression109 bucket13 @@ -585,12 +709,12 @@ graph TD Bucket16("Bucket 16 (nullableBoundary)
Deps: 119

ROOT PgClassExpression{15}ᐸ__post_com...al_set__.vᐳ[119]"):::bucket classDef bucket16 stroke:#f5deb3 class Bucket16 bucket16 - Bucket17("Bucket 17 (listItem)
Deps: 10, 144, 145, 436, 6, 156

ROOT __Item{17}ᐸ130ᐳ[131]"):::bucket + Bucket17("Bucket 17 (listItem)
Deps: 129, 145

ROOT __Item{17}ᐸ130ᐳ[131]"):::bucket classDef bucket17 stroke:#696969 class Bucket17,__Item131,PgSelectSingle132 bucket17 - Bucket18("Bucket 18 (nullableBoundary)
Deps: 132, 10, 144, 145, 436, 6, 156

ROOT PgSelectSingle{17}ᐸpostᐳ[132]
1:
ᐳ: 133, 134, 136, 137
2: PgSelect[146], PgSelect[154]
3: PgSelectRows[147], PgSelectRows[157]"):::bucket + Bucket18("Bucket 18 (nullableBoundary)
Deps: 132, 129, 131, 145

ROOT PgSelectSingle{17}ᐸpostᐳ[132]
1:
ᐳ: 133, 136, 137, 457, 461, 458, 459, 462, 463
2: PgSelectRows[147], PgSelectRows[157]"):::bucket classDef bucket18 stroke:#00bfff - class Bucket18,PgClassExpression133,PgClassExpression134,PgClassExpression136,PgClassExpression137,PgSelect146,PgSelectRows147,PgSelect154,PgSelectRows157 bucket18 + class Bucket18,PgClassExpression133,PgClassExpression136,PgClassExpression137,PgSelectRows147,PgSelectRows157,Access457,List458,Lambda459,Access461,List462,Lambda463 bucket18 Bucket19("Bucket 19 (listItem)

ROOT __Item{19}ᐸ147ᐳ[148]"):::bucket classDef bucket19 stroke:#7f007f class Bucket19,__Item148,PgSelectSingle149,PgClassExpression150 bucket19 @@ -603,9 +727,9 @@ graph TD Bucket22("Bucket 22 (nullableBoundary)
Deps: 160

ROOT PgClassExpression{21}ᐸ__post_com...al_set__.vᐳ[160]"):::bucket classDef bucket22 stroke:#7fff00 class Bucket22 bucket22 - Bucket23("Bucket 23 (listItem)
Deps: 10, 181, 182, 436, 6, 193

ROOT __Item{23}ᐸ167ᐳ[168]
1:
ᐳ: 169, 170, 171, 173, 174
2: PgSelect[183], PgSelect[191]
3: PgSelectRows[184], PgSelectRows[194]"):::bucket + Bucket23("Bucket 23 (listItem)
Deps: 164, 182

ROOT __Item{23}ᐸ167ᐳ[168]
1:
ᐳ: 169, 465, 469, 170, 173, 174, 466, 467, 470, 471
2: PgSelectRows[184], PgSelectRows[194]"):::bucket classDef bucket23 stroke:#ff1493 - class Bucket23,__Item168,PgSelectSingle169,PgClassExpression170,PgClassExpression171,PgClassExpression173,PgClassExpression174,PgSelect183,PgSelectRows184,PgSelect191,PgSelectRows194 bucket23 + class Bucket23,__Item168,PgSelectSingle169,PgClassExpression170,PgClassExpression173,PgClassExpression174,PgSelectRows184,PgSelectRows194,Access465,List466,Lambda467,Access469,List470,Lambda471 bucket23 Bucket24("Bucket 24 (listItem)

ROOT __Item{24}ᐸ184ᐳ[185]"):::bucket classDef bucket24 stroke:#808000 class Bucket24,__Item185,PgSelectSingle186,PgClassExpression187 bucket24 @@ -636,21 +760,21 @@ graph TD Bucket33("Bucket 33 (listItem)

ROOT __Item{33}ᐸ230ᐳ[231]"):::bucket classDef bucket33 stroke:#f5deb3 class Bucket33,__Item231,PgSelectSingle232,PgClassExpression233,PgClassExpression234 bucket33 - Bucket34("Bucket 34 (nullableBoundary)
Deps: 10, 238, 6, 252, 437, 260, 295, 329, 327, 336, 367, 373, 403, 414, 269, 270, 436, 281, 304, 305, 316, 345, 346, 357, 382, 383, 394

ROOT Connectionᐸ236ᐳ[238]
1: PgSelect[240]
2: PgSelectRows[241]"):::bucket + Bucket34("Bucket 34 (nullableBoundary)
Deps: 10, 238, 6, 252, 537, 260, 269, 281, 295, 304, 316, 329, 327, 336, 345, 357, 367, 373, 382, 394, 536, 270, 305, 346, 383, 403, 414

ROOT Connectionᐸ236ᐳ[238]
1: 520, 524, 528, 532
2: PgSelect[240]
3: PgSelectRows[241]"):::bucket classDef bucket34 stroke:#696969 - class Bucket34,PgSelect240,PgSelectRows241 bucket34 - Bucket35("Bucket 35 (listItem)
Deps: 10, 252, 6, 437, 260, 295, 329, 327, 336, 367, 373, 403, 414, 269, 270, 436, 281, 304, 305, 316, 345, 346, 357, 382, 383, 394

ROOT __Item{35}ᐸ241ᐳ[242]"):::bucket + class Bucket34,PgSelect240,PgSelectRows241,PgSelectInlineApply520,PgSelectInlineApply524,PgSelectInlineApply528,PgSelectInlineApply532 bucket34 + Bucket35("Bucket 35 (listItem)
Deps: 10, 252, 6, 537, 260, 269, 281, 295, 304, 316, 329, 327, 336, 345, 357, 367, 373, 382, 394, 536, 240, 270, 305, 346, 383, 403, 414

ROOT __Item{35}ᐸ241ᐳ[242]"):::bucket classDef bucket35 stroke:#00bfff class Bucket35,__Item242,PgSelectSingle243 bucket35 - Bucket36("Bucket 36 (nullableBoundary)
Deps: 243, 10, 252, 6, 437, 260, 295, 329, 327, 336, 367, 373, 403, 414, 269, 270, 436, 281, 304, 305, 316, 345, 346, 357, 382, 383, 394

ROOT PgSelectSingle{35}ᐸpersonᐳ[243]
1:
ᐳ: 244, 245
2: 254, 288, 330, 365, 405, 416, 422, 429
3: 255, 290, 331, 368, 406, 417, 424, 431"):::bucket + Bucket36("Bucket 36 (nullableBoundary)
Deps: 243, 10, 252, 6, 537, 260, 269, 281, 295, 304, 316, 329, 327, 336, 345, 357, 367, 373, 382, 394, 536, 240, 242, 270, 305, 346, 383, 403, 414

ROOT PgSelectSingle{35}ᐸpersonᐳ[243]
1: 488, 492, 496, 500, 504, 508, 512, 516
ᐳ: 244, 245, 521, 525, 529, 533, 522, 523, 526, 527, 530, 531, 534, 535
2: 254, 288, 330, 365, 406, 417, 424, 431
3: 255, 290, 331, 368"):::bucket classDef bucket36 stroke:#7f007f - class Bucket36,PgClassExpression244,PgClassExpression245,PgSelect254,PgSelectRows255,PgSelect288,PgSelectRows290,PgSelect330,PgSelectRows331,PgSelect365,PgSelectRows368,PgSelect405,PgSelectRows406,PgSelect416,PgSelectRows417,PgSelect422,PgSelectRows424,PgSelect429,PgSelectRows431 bucket36 - Bucket37("Bucket 37 (listItem)
Deps: 10, 269, 270, 436, 6, 281

ROOT __Item{37}ᐸ255ᐳ[256]"):::bucket + class Bucket36,PgClassExpression244,PgClassExpression245,PgSelect254,PgSelectRows255,PgSelect288,PgSelectRows290,PgSelect330,PgSelectRows331,PgSelect365,PgSelectRows368,PgSelectRows406,PgSelectRows417,PgSelectRows424,PgSelectRows431,PgSelectInlineApply488,PgSelectInlineApply492,PgSelectInlineApply496,PgSelectInlineApply500,PgSelectInlineApply504,PgSelectInlineApply508,PgSelectInlineApply512,PgSelectInlineApply516,Access521,List522,Lambda523,Access525,List526,Lambda527,Access529,List530,Lambda531,Access533,List534,Lambda535 bucket36 + Bucket37("Bucket 37 (listItem)
Deps: 254, 270

ROOT __Item{37}ᐸ255ᐳ[256]"):::bucket classDef bucket37 stroke:#ffa500 class Bucket37,__Item256,PgSelectSingle257 bucket37 - Bucket38("Bucket 38 (nullableBoundary)
Deps: 257, 10, 269, 270, 436, 6, 281

ROOT PgSelectSingle{37}ᐸpostᐳ[257]
1:
ᐳ: 258, 259, 261, 262
2: PgSelect[271], PgSelect[279]
3: PgSelectRows[272], PgSelectRows[282]"):::bucket + Bucket38("Bucket 38 (nullableBoundary)
Deps: 257, 254, 256, 270

ROOT PgSelectSingle{37}ᐸpostᐳ[257]
1:
ᐳ: 258, 261, 262, 489, 493, 490, 491, 494, 495
2: PgSelectRows[272], PgSelectRows[282]"):::bucket classDef bucket38 stroke:#0000ff - class Bucket38,PgClassExpression258,PgClassExpression259,PgClassExpression261,PgClassExpression262,PgSelect271,PgSelectRows272,PgSelect279,PgSelectRows282 bucket38 + class Bucket38,PgClassExpression258,PgClassExpression261,PgClassExpression262,PgSelectRows272,PgSelectRows282,Access489,List490,Lambda491,Access493,List494,Lambda495 bucket38 Bucket39("Bucket 39 (listItem)

ROOT __Item{39}ᐸ272ᐳ[273]"):::bucket classDef bucket39 stroke:#7fff00 class Bucket39,__Item273,PgSelectSingle274,PgClassExpression275 bucket39 @@ -663,9 +787,9 @@ graph TD Bucket42("Bucket 42 (nullableBoundary)
Deps: 285

ROOT PgClassExpression{41}ᐸ__post_com...al_set__.vᐳ[285]"):::bucket classDef bucket42 stroke:#dda0dd class Bucket42 bucket42 - Bucket43("Bucket 43 (listItem)
Deps: 10, 304, 305, 436, 6, 316

ROOT __Item{43}ᐸ290ᐳ[291]
1:
ᐳ: 292, 293, 294, 296, 297
2: PgSelect[306], PgSelect[314]
3: PgSelectRows[307], PgSelectRows[317]"):::bucket + Bucket43("Bucket 43 (listItem)
Deps: 288, 305

ROOT __Item{43}ᐸ290ᐳ[291]
1:
ᐳ: 292, 497, 501, 293, 296, 297, 498, 499, 502, 503
2: PgSelectRows[307], PgSelectRows[317]"):::bucket classDef bucket43 stroke:#ff0000 - class Bucket43,__Item291,PgSelectSingle292,PgClassExpression293,PgClassExpression294,PgClassExpression296,PgClassExpression297,PgSelect306,PgSelectRows307,PgSelect314,PgSelectRows317 bucket43 + class Bucket43,__Item291,PgSelectSingle292,PgClassExpression293,PgClassExpression296,PgClassExpression297,PgSelectRows307,PgSelectRows317,Access497,List498,Lambda499,Access501,List502,Lambda503 bucket43 Bucket44("Bucket 44 (listItem)

ROOT __Item{44}ᐸ307ᐳ[308]"):::bucket classDef bucket44 stroke:#ffff00 class Bucket44,__Item308,PgSelectSingle309,PgClassExpression310 bucket44 @@ -678,12 +802,12 @@ graph TD Bucket47("Bucket 47 (nullableBoundary)
Deps: 320

ROOT PgClassExpression{46}ᐸ__post_com...al_set__.vᐳ[320]"):::bucket classDef bucket47 stroke:#3cb371 class Bucket47 bucket47 - Bucket48("Bucket 48 (listItem)
Deps: 10, 345, 346, 436, 6, 357

ROOT __Item{48}ᐸ331ᐳ[332]"):::bucket + Bucket48("Bucket 48 (listItem)
Deps: 330, 346

ROOT __Item{48}ᐸ331ᐳ[332]"):::bucket classDef bucket48 stroke:#a52a2a class Bucket48,__Item332,PgSelectSingle333 bucket48 - Bucket49("Bucket 49 (nullableBoundary)
Deps: 333, 10, 345, 346, 436, 6, 357

ROOT PgSelectSingle{48}ᐸpostᐳ[333]
1:
ᐳ: 334, 335, 337, 338
2: PgSelect[347], PgSelect[355]
3: PgSelectRows[348], PgSelectRows[358]"):::bucket + Bucket49("Bucket 49 (nullableBoundary)
Deps: 333, 330, 332, 346

ROOT PgSelectSingle{48}ᐸpostᐳ[333]
1:
ᐳ: 334, 337, 338, 505, 509, 506, 507, 510, 511
2: PgSelectRows[348], PgSelectRows[358]"):::bucket classDef bucket49 stroke:#ff00ff - class Bucket49,PgClassExpression334,PgClassExpression335,PgClassExpression337,PgClassExpression338,PgSelect347,PgSelectRows348,PgSelect355,PgSelectRows358 bucket49 + class Bucket49,PgClassExpression334,PgClassExpression337,PgClassExpression338,PgSelectRows348,PgSelectRows358,Access505,List506,Lambda507,Access509,List510,Lambda511 bucket49 Bucket50("Bucket 50 (listItem)

ROOT __Item{50}ᐸ348ᐳ[349]"):::bucket classDef bucket50 stroke:#f5deb3 class Bucket50,__Item349,PgSelectSingle350,PgClassExpression351 bucket50 @@ -696,9 +820,9 @@ graph TD Bucket53("Bucket 53 (nullableBoundary)
Deps: 361

ROOT PgClassExpression{52}ᐸ__post_com...al_set__.vᐳ[361]"):::bucket classDef bucket53 stroke:#7f007f class Bucket53 bucket53 - Bucket54("Bucket 54 (listItem)
Deps: 10, 382, 383, 436, 6, 394

ROOT __Item{54}ᐸ368ᐳ[369]
1:
ᐳ: 370, 371, 372, 374, 375
2: PgSelect[384], PgSelect[392]
3: PgSelectRows[385], PgSelectRows[395]"):::bucket + Bucket54("Bucket 54 (listItem)
Deps: 365, 383

ROOT __Item{54}ᐸ368ᐳ[369]
1:
ᐳ: 370, 513, 517, 371, 374, 375, 514, 515, 518, 519
2: PgSelectRows[385], PgSelectRows[395]"):::bucket classDef bucket54 stroke:#ffa500 - class Bucket54,__Item369,PgSelectSingle370,PgClassExpression371,PgClassExpression372,PgClassExpression374,PgClassExpression375,PgSelect384,PgSelectRows385,PgSelect392,PgSelectRows395 bucket54 + class Bucket54,__Item369,PgSelectSingle370,PgClassExpression371,PgClassExpression374,PgClassExpression375,PgSelectRows385,PgSelectRows395,Access513,List514,Lambda515,Access517,List518,Lambda519 bucket54 Bucket55("Bucket 55 (listItem)

ROOT __Item{55}ᐸ385ᐳ[386]"):::bucket classDef bucket55 stroke:#0000ff class Bucket55,__Item386,PgSelectSingle387,PgClassExpression388 bucket55 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.sql b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.sql index bec6762e59..5d1dfecc23 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-computed-fields.sql @@ -2,7 +2,51 @@ select __person__."person_full_name" as "0", case when (__person__) is not distinct from null then null::text else json_build_array((((__person__)."id"))::text, ((__person__)."person_full_name"), (((__person__)."aliases"))::text, ((__person__)."about"), ((__person__)."email"), case when (((__person__)."site")) is not distinct from null then null::text else json_build_array(((((__person__)."site"))."url"))::text end, (((__person__)."config"))::text, (((__person__)."last_login_from_ip"))::text, (((__person__)."last_login_from_subnet"))::text, (((__person__)."user_mac"))::text, to_char(((__person__)."created_at"), 'YYYY-MM-DD"T"HH24:MI:SS.US'::text))::text end as "1", "c"."person_first_name"(__person__) as "2", - __person__."id"::text as "3" + __person__."id"::text as "3", + array( + select array[ + __compound_key__."person_id_1"::text, + __compound_key__."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key__ + where ( + __compound_key__."person_id_1" = __person__."id" + ) + order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc + )::text as "4", + array( + select array[ + __compound_key_2."person_id_1"::text, + __compound_key_2."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_2 + where ( + __compound_key_2."person_id_2" = __person__."id" + ) + order by __compound_key_2."person_id_1" asc, __compound_key_2."person_id_2" asc + )::text as "5", + array( + select array[ + __compound_key_3."person_id_1"::text, + __compound_key_3."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_3 + where ( + __compound_key_3."person_id_1" = __person__."id" + ) + order by __compound_key_3."person_id_1" asc, __compound_key_3."person_id_2" asc + )::text as "6", + array( + select array[ + __compound_key_4."person_id_1"::text, + __compound_key_4."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_4 + where ( + __compound_key_4."person_id_2" = __person__."id" + ) + order by __compound_key_4."person_id_1" asc, __compound_key_4."person_id_2" asc + )::text as "7" from "c"."person" as __person__ order by __person__."id" asc; @@ -11,8 +55,15 @@ from (select ids.ordinality - 1 as idx, (ids.value->>0)::"c"."person" as "id0" f lateral ( select __person_friends__."person_full_name" as "0", - case when (__person_friends__) is not distinct from null then null::text else json_build_array((((__person_friends__)."id"))::text, ((__person_friends__)."person_full_name"), (((__person_friends__)."aliases"))::text, ((__person_friends__)."about"), ((__person_friends__)."email"), case when (((__person_friends__)."site")) is not distinct from null then null::text else json_build_array(((((__person_friends__)."site"))."url"))::text end, (((__person_friends__)."config"))::text, (((__person_friends__)."last_login_from_ip"))::text, (((__person_friends__)."last_login_from_subnet"))::text, (((__person_friends__)."user_mac"))::text, to_char(((__person_friends__)."created_at"), 'YYYY-MM-DD"T"HH24:MI:SS.US'::text))::text end as "1", - "c"."person_first_name"(__person_friends__) as "2", + "c"."person_first_name"(__person_friends__) as "1", + array( + select array[ + __person_friends_2."person_full_name", + "c"."person_first_name"(__person_friends_2) + ]::text[] + from "c"."person_friends"(__person_friends__) as __person_friends_2 + limit 1 + )::text as "2", __person_friends_identifiers__.idx as "3" from "c"."person_friends"(__person_friends_identifiers__."id0") as __person_friends__ ) as __person_friends_result__; @@ -22,13 +73,23 @@ from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from js lateral ( select __post__."headline" as "0", - case when (__post__) is not distinct from null then null::text else json_build_array((((__post__)."id"))::text, ((__post__)."headline"), ((__post__)."body"), (((__post__)."author_id"))::text, (((__post__)."enums"))::text, (case when (((__post__)."comptypes")) is not distinct from null then null::text else array( - select case when (__comptype__) is not distinct from null then null::text else json_build_array(to_char(((__comptype__)."schedule"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), (((__comptype__)."is_optimised"))::text)::text end - from unnest(((__post__)."comptypes")) __comptype__ - )::text end))::text end as "1", - "a"."post_headline_trimmed"(__post__) as "2", - __post__."author_id"::text as "3", - __post_identifiers__.idx as "4" + "a"."post_headline_trimmed"(__post__) as "1", + __post__."author_id"::text as "2", + array( + select array[ + to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set__(v) + limit 1 + )::text as "3", + array( + select array[ + to_char(__post_computed_interval_set_2.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set_2(v) + limit 1 + )::text as "4", + __post_identifiers__.idx as "5" from "a"."post" as __post__ where ( __post__."author_id" = __post_identifiers__."id0" @@ -42,13 +103,23 @@ from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from js lateral ( select __post__."headline" as "0", - case when (__post__) is not distinct from null then null::text else json_build_array((((__post__)."id"))::text, ((__post__)."headline"), ((__post__)."body"), (((__post__)."author_id"))::text, (((__post__)."enums"))::text, (case when (((__post__)."comptypes")) is not distinct from null then null::text else array( - select case when (__comptype__) is not distinct from null then null::text else json_build_array(to_char(((__comptype__)."schedule"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), (((__comptype__)."is_optimised"))::text)::text end - from unnest(((__post__)."comptypes")) __comptype__ - )::text end))::text end as "1", - "a"."post_headline_trimmed"(__post__) as "2", - __post__."author_id"::text as "3", - __post_identifiers__.idx as "4" + "a"."post_headline_trimmed"(__post__) as "1", + __post__."author_id"::text as "2", + array( + select array[ + to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set__(v) + limit 1 + )::text as "3", + array( + select array[ + to_char(__post_computed_interval_set_2.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set_2(v) + limit 1 + )::text as "4", + __post_identifiers__.idx as "5" from "a"."post" as __post__ where ( __post__."author_id" = __post_identifiers__."id0" @@ -62,13 +133,23 @@ from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from js lateral ( select __post__."headline" as "0", - case when (__post__) is not distinct from null then null::text else json_build_array((((__post__)."id"))::text, ((__post__)."headline"), ((__post__)."body"), (((__post__)."author_id"))::text, (((__post__)."enums"))::text, (case when (((__post__)."comptypes")) is not distinct from null then null::text else array( - select case when (__comptype__) is not distinct from null then null::text else json_build_array(to_char(((__comptype__)."schedule"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), (((__comptype__)."is_optimised"))::text)::text end - from unnest(((__post__)."comptypes")) __comptype__ - )::text end))::text end as "1", - "a"."post_headline_trimmed"(__post__) as "2", - __post__."author_id"::text as "3", - __post_identifiers__.idx as "4" + "a"."post_headline_trimmed"(__post__) as "1", + __post__."author_id"::text as "2", + array( + select array[ + to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set__(v) + limit 1 + )::text as "3", + array( + select array[ + to_char(__post_computed_interval_set_2.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set_2(v) + limit 1 + )::text as "4", + __post_identifiers__.idx as "5" from "a"."post" as __post__ where ( @@ -79,72 +160,52 @@ lateral ( order by __post__."id" asc ) as __post_result__; -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_1" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; - -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_2" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; - select __person__."id"::text as "0", - __person__."person_full_name" as "1" + __person__."person_full_name" as "1", + array( + select array[ + __compound_key__."person_id_1"::text, + __compound_key__."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key__ + where ( + __compound_key__."person_id_1" = __person__."id" + ) + order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc + )::text as "2", + array( + select array[ + __compound_key_2."person_id_1"::text, + __compound_key_2."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_2 + where ( + __compound_key_2."person_id_2" = __person__."id" + ) + order by __compound_key_2."person_id_1" asc, __compound_key_2."person_id_2" asc + )::text as "3", + array( + select array[ + __compound_key_3."person_id_1"::text, + __compound_key_3."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_3 + where ( + __compound_key_3."person_id_1" = __person__."id" + ) + order by __compound_key_3."person_id_1" asc, __compound_key_3."person_id_2" asc + )::text as "4", + array( + select array[ + __compound_key_4."person_id_1"::text, + __compound_key_4."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_4 + where ( + __compound_key_4."person_id_2" = __person__."id" + ) + order by __compound_key_4."person_id_1" asc, __compound_key_4."person_id_2" asc + )::text as "5" from "c"."person" as __person__ -order by __person__."id" asc; - -select __person_friends_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"c"."person" as "id0" from json_array_elements($1::json) with ordinality as ids) as __person_friends_identifiers__, -lateral ( - select - __person_friends__."person_full_name" as "0", - "c"."person_first_name"(__person_friends__) as "1", - __person_friends_identifiers__.idx as "2" - from "c"."person_friends"(__person_friends_identifiers__."id0") as __person_friends__ - limit 1 -) as __person_friends_result__; - -select __post_computed_interval_set_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"a"."post" as "id0" from json_array_elements($1::json) with ordinality as ids) as __post_computed_interval_set_identifiers__, -lateral ( - select - to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "0", - __post_computed_interval_set_identifiers__.idx as "1" - from "a"."post_computed_interval_set"(__post_computed_interval_set_identifiers__."id0") as __post_computed_interval_set__(v) - limit 1 -) as __post_computed_interval_set_result__; - -select __post_computed_interval_set_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"a"."post" as "id0" from json_array_elements($1::json) with ordinality as ids) as __post_computed_interval_set_identifiers__, -lateral ( - select - to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "0", - __post_computed_interval_set_identifiers__.idx as "1" - from "a"."post_computed_interval_set"(__post_computed_interval_set_identifiers__."id0") as __post_computed_interval_set__(v) - limit 1 -) as __post_computed_interval_set_result__; - -select - to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "0" -from "a"."post_computed_interval_set"($1::"a"."post") as __post_computed_interval_set__(v) -limit 1; \ No newline at end of file +order by __person__."id" asc; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.mermaid index a5df7a8bfb..31f0bae410 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.mermaid @@ -9,28 +9,30 @@ graph TD %% plan dependencies - PgSelect41[["PgSelect[41∈0] ➊
ᐸint_set_queryᐳ"]]:::plan + PgSelect67[["PgSelect[67∈0] ➊
ᐸpostᐳ"]]:::plan Object11{{"Object[11∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan + Constant92{{"Constant[92∈0] ➊
ᐸ1ᐳ"}}:::plan + PgFromExpression78{{"PgFromExpression[78∈0] ➊"}}:::plan + PgSelectInlineApply85["PgSelectInlineApply[85∈0] ➊"]:::plan + Object11 & Constant92 & PgFromExpression78 & PgSelectInlineApply85 --> PgSelect67 + PgSelect41[["PgSelect[41∈0] ➊
ᐸint_set_queryᐳ"]]:::plan PgFromExpression43{{"PgFromExpression[43∈0] ➊"}}:::plan Object11 & PgFromExpression43 --> PgSelect41 PgSelect8[["PgSelect[8∈0] ➊
ᐸcompound_type_set_queryᐳ"]]:::plan - Constant85{{"Constant[85∈0] ➊
ᐸ5ᐳ"}}:::plan - Object11 & Constant85 --> PgSelect8 + Constant89{{"Constant[89∈0] ➊
ᐸ5ᐳ"}}:::plan + Object11 & Constant89 --> PgSelect8 PgSelect25[["PgSelect[25∈0] ➊
ᐸtable_set_queryᐳ"]]:::plan Object11 --> PgSelect25 PgSelect33[["PgSelect[33∈0] ➊
ᐸtable_set_queryᐳ"]]:::plan - Constant86{{"Constant[86∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant90{{"Constant[90∈0] ➊
ᐸ2ᐳ"}}:::plan Object11 --> PgSelect33 - Constant86 -- 2 --> PgSelect33 - Constant87{{"Constant[87∈0] ➊
ᐸ6ᐳ"}}:::plan - Constant85 & Constant87 --> PgFromExpression43 + Constant90 -- 2 --> PgSelect33 + Constant91{{"Constant[91∈0] ➊
ᐸ6ᐳ"}}:::plan + Constant89 & Constant91 --> PgFromExpression43 PgSelect48[["PgSelect[48∈0] ➊
ᐸstatic_big_integerᐳ"]]:::plan Object11 --> PgSelect48 PgSelect54[["PgSelect[54∈0] ➊
ᐸquery_interval_setᐳ"]]:::plan Object11 --> PgSelect54 - PgSelect67[["PgSelect[67∈0] ➊
ᐸpostᐳ"]]:::plan - Constant88{{"Constant[88∈0] ➊
ᐸ1ᐳ"}}:::plan - Object11 & Constant88 --> PgSelect67 Access9{{"Access[9∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access10{{"Access[10∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access9 & Access10 --> Object11 @@ -52,7 +54,6 @@ graph TD PgSelectRows69[["PgSelectRows[69∈0] ➊"]]:::plan PgSelect67 --> PgSelectRows69 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - PgFromExpression78{{"PgFromExpression[78∈0] ➊"}}:::plan __Item13[/"__Item[13∈1]
ᐸ12ᐳ"\]:::itemplan PgSelectRows12 ==> __Item13 PgSelectSingle14{{"PgSelectSingle[14∈1]
ᐸcompound_type_set_queryᐳ"}}:::plan @@ -101,18 +102,20 @@ graph TD __Item57 --> PgSelectSingle58 PgClassExpression59{{"PgClassExpression[59∈10]
ᐸ__query_in...al_set__.vᐳ"}}:::plan PgSelectSingle58 --> PgClassExpression59 - PgSelect74[["PgSelect[74∈12]
ᐸpost_computed_interval_setᐳ"]]:::plan - PgClassExpression73{{"PgClassExpression[73∈12]
ᐸ__post__ᐳ"}}:::plan - Object11 & PgClassExpression73 & PgFromExpression78 --> PgSelect74 + List87{{"List[87∈12]
ᐸ70,86ᐳ"}}:::plan __Item70[/"__Item[70∈12]
ᐸ69ᐳ"\]:::itemplan + Access86{{"Access[86∈12] ➊
ᐸ67.m.subqueryDetailsFor74ᐳ"}}:::plan + __Item70 & Access86 --> List87 PgSelectRows69 ==> __Item70 PgSelectSingle71{{"PgSelectSingle[71∈12]
ᐸpostᐳ"}}:::plan __Item70 --> PgSelectSingle71 PgClassExpression72{{"PgClassExpression[72∈12]
ᐸ__post__.”id”ᐳ"}}:::plan PgSelectSingle71 --> PgClassExpression72 - PgSelectSingle71 --> PgClassExpression73 PgSelectRows79[["PgSelectRows[79∈12]"]]:::plan - PgSelect74 --> PgSelectRows79 + Lambda88{{"Lambda[88∈12]"}}:::plan + Lambda88 --> PgSelectRows79 + PgSelect67 --> Access86 + List87 --> Lambda88 __Item80[/"__Item[80∈13]
ᐸ79ᐳ"\]:::itemplan PgSelectRows79 ==> __Item80 PgSelectSingle81{{"PgSelectSingle[81∈13]
ᐸpost_computed_interval_setᐳ"}}:::plan @@ -123,9 +126,9 @@ graph TD %% define steps subgraph "Buckets for queries/v4/simple-procedure-query" - Bucket0("Bucket 0 (root)

1:
ᐳ: 7, 9, 10, 78, 85, 86, 87, 88, 11, 43
2: 8, 25, 33, 41, 48, 54, 67
3: 12, 27, 35, 44, 50, 56, 69"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 7, 9, 10, 78, 89, 90, 91, 92, 11, 43
2: 8, 25, 33, 41, 48, 54, 85
3: 12, 27, 35, 44, 50, 56, 67
4: PgSelectRows[69]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,PgSelectRows12,PgSelect25,PgSelectRows27,PgSelect33,PgSelectRows35,PgSelect41,PgFromExpression43,PgSelectRows44,PgSelect48,PgSelectRows50,PgSelect54,PgSelectRows56,PgSelect67,PgSelectRows69,PgFromExpression78,Constant85,Constant86,Constant87,Constant88 bucket0 + class Bucket0,__Value2,__Value4,PgSelect8,Access9,Access10,Object11,PgSelectRows12,PgSelect25,PgSelectRows27,PgSelect33,PgSelectRows35,PgSelect41,PgFromExpression43,PgSelectRows44,PgSelect48,PgSelectRows50,PgSelect54,PgSelectRows56,PgSelect67,PgSelectRows69,PgFromExpression78,PgSelectInlineApply85,Constant89,Constant90,Constant91,Constant92 bucket0 Bucket1("Bucket 1 (listItem)

ROOT __Item{1}ᐸ12ᐳ[13]"):::bucket classDef bucket1 stroke:#00bfff class Bucket1,__Item13,PgSelectSingle14 bucket1 @@ -159,9 +162,9 @@ graph TD Bucket11("Bucket 11 (nullableBoundary)
Deps: 59

ROOT PgClassExpression{10}ᐸ__query_in...al_set__.vᐳ[59]"):::bucket classDef bucket11 stroke:#00ffff class Bucket11 bucket11 - Bucket12("Bucket 12 (listItem)
Deps: 11, 78, 7

ROOT __Item{12}ᐸ69ᐳ[70]
1:
ᐳ: 71, 72, 73
2: PgSelect[74]
3: PgSelectRows[79]"):::bucket + Bucket12("Bucket 12 (listItem)
Deps: 67

ROOT __Item{12}ᐸ69ᐳ[70]
1:
ᐳ: 71, 86, 72, 87, 88
2: PgSelectRows[79]"):::bucket classDef bucket12 stroke:#4169e1 - class Bucket12,__Item70,PgSelectSingle71,PgClassExpression72,PgClassExpression73,PgSelect74,PgSelectRows79 bucket12 + class Bucket12,__Item70,PgSelectSingle71,PgClassExpression72,PgSelectRows79,Access86,List87,Lambda88 bucket12 Bucket13("Bucket 13 (listItem)

ROOT __Item{13}ᐸ79ᐳ[80]"):::bucket classDef bucket13 stroke:#3cb371 class Bucket13,__Item80,PgSelectSingle81,PgClassExpression82 bucket13 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.sql b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.sql index 90415c8049..40bd5bb1e5 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-procedure-query.sql @@ -38,14 +38,12 @@ from "a"."query_interval_set"() as __query_interval_set__(v); select __post__."id"::text as "0", - case when (__post__) is not distinct from null then null::text else json_build_array((((__post__)."id"))::text, ((__post__)."headline"), ((__post__)."body"), (((__post__)."author_id"))::text, (((__post__)."enums"))::text, (case when (((__post__)."comptypes")) is not distinct from null then null::text else array( - select case when (__comptype__) is not distinct from null then null::text else json_build_array(to_char(((__comptype__)."schedule"), 'YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM'::text), (((__comptype__)."is_optimised"))::text)::text end - from unnest(((__post__)."comptypes")) __comptype__ - )::text end))::text end as "1" + array( + select array[ + to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) + ]::text[] + from "a"."post_computed_interval_set"(__post__) as __post_computed_interval_set__(v) + )::text as "1" from "a"."post" as __post__ order by __post__."id" asc -limit 1; - -select - to_char(__post_computed_interval_set__.v, 'YYYY_MM_DD_HH24_MI_SS.US'::text) as "0" -from "a"."post_computed_interval_set"($1::"a"."post") as __post_computed_interval_set__(v); \ No newline at end of file +limit 1; \ No newline at end of file diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.mermaid b/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.mermaid index 926600aba5..86a4532929 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.mermaid +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.mermaid @@ -11,50 +11,72 @@ graph TD %% plan dependencies PgSelect7[["PgSelect[7∈0] ➊
ᐸpersonᐳ"]]:::plan Object10{{"Object[10∈0] ➊
ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan - Object10 --> PgSelect7 + PgSelectInlineApply57["PgSelectInlineApply[57∈0] ➊"]:::plan + PgSelectInlineApply61["PgSelectInlineApply[61∈0] ➊"]:::plan + PgSelectInlineApply65["PgSelectInlineApply[65∈0] ➊"]:::plan + PgSelectInlineApply69["PgSelectInlineApply[69∈0] ➊"]:::plan + Object10 & PgSelectInlineApply57 & PgSelectInlineApply61 & PgSelectInlineApply65 & PgSelectInlineApply69 --> PgSelect7 PgSelect50[["PgSelect[50∈0] ➊
ᐸcompound_keyᐳ"]]:::plan Object10 --> PgSelect50 + ApplyInput30{{"ApplyInput[30∈0] ➊"}}:::plan + ApplyInput30 --> PgSelectInlineApply61 Access8{{"Access[8∈0] ➊
ᐸ2.pgSettingsᐳ"}}:::plan Access9{{"Access[9∈0] ➊
ᐸ2.withPgClientᐳ"}}:::plan Access8 & Access9 --> Object10 __InputObject26{{"__InputObject[26∈0] ➊"}}:::plan - Constant58{{"Constant[58∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan - Constant58 --> __InputObject26 + Constant74{{"Constant[74∈0] ➊
ᐸ'Large bet on myself in round one.'ᐳ"}}:::plan + Constant74 --> __InputObject26 + Constant73{{"Constant[73∈0] ➊
ᐸ2ᐳ"}}:::plan + Constant73 --> PgSelectInlineApply57 __Value2["__Value[2∈0] ➊
ᐸcontextᐳ"]:::plan __Value2 --> Access8 __Value2 --> Access9 PgSelectRows11[["PgSelectRows[11∈0] ➊"]]:::plan PgSelect7 --> PgSelectRows11 - ApplyInput30{{"ApplyInput[30∈0] ➊"}}:::plan __InputObject26 --> ApplyInput30 PgSelectRows52[["PgSelectRows[52∈0] ➊"]]:::plan PgSelect50 --> PgSelectRows52 __Value4["__Value[4∈0] ➊
ᐸrootValueᐳ"]:::plan - Constant57{{"Constant[57∈0] ➊
ᐸ2ᐳ"}}:::plan - PgSelect28[["PgSelect[28∈1]
ᐸpostᐳ"]]:::plan - PgClassExpression14{{"PgClassExpression[14∈1]
ᐸ__person__.”id”ᐳ"}}:::plan - Object10 & PgClassExpression14 & ApplyInput30 --> PgSelect28 - PgSelect17[["PgSelect[17∈1]
ᐸpostᐳ"]]:::plan - Object10 & PgClassExpression14 & Constant57 --> PgSelect17 - PgSelect36[["PgSelect[36∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression14 --> PgSelect36 - PgSelect43[["PgSelect[43∈1]
ᐸcompound_keyᐳ"]]:::plan - Object10 & PgClassExpression14 --> PgSelect43 + List59{{"List[59∈1]
ᐸ12,58ᐳ"}}:::plan __Item12[/"__Item[12∈1]
ᐸ11ᐳ"\]:::itemplan + Access58{{"Access[58∈1] ➊
ᐸ7.m.subqueryDetailsFor17ᐳ"}}:::plan + __Item12 & Access58 --> List59 + List63{{"List[63∈1]
ᐸ12,62ᐳ"}}:::plan + Access62{{"Access[62∈1] ➊
ᐸ7.m.subqueryDetailsFor28ᐳ"}}:::plan + __Item12 & Access62 --> List63 + List67{{"List[67∈1]
ᐸ12,66ᐳ"}}:::plan + Access66{{"Access[66∈1] ➊
ᐸ7.m.subqueryDetailsFor36ᐳ"}}:::plan + __Item12 & Access66 --> List67 + List71{{"List[71∈1]
ᐸ12,70ᐳ"}}:::plan + Access70{{"Access[70∈1] ➊
ᐸ7.m.subqueryDetailsFor43ᐳ"}}:::plan + __Item12 & Access70 --> List71 PgSelectRows11 ==> __Item12 PgSelectSingle13{{"PgSelectSingle[13∈1]
ᐸpersonᐳ"}}:::plan __Item12 --> PgSelectSingle13 + PgClassExpression14{{"PgClassExpression[14∈1]
ᐸ__person__.”id”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression14 PgClassExpression15{{"PgClassExpression[15∈1]
ᐸ__person__...full_name”ᐳ"}}:::plan PgSelectSingle13 --> PgClassExpression15 PgSelectRows21[["PgSelectRows[21∈1]"]]:::plan - PgSelect17 --> PgSelectRows21 + Lambda60{{"Lambda[60∈1]"}}:::plan + Lambda60 --> PgSelectRows21 PgSelectRows31[["PgSelectRows[31∈1]"]]:::plan - PgSelect28 --> PgSelectRows31 + Lambda64{{"Lambda[64∈1]"}}:::plan + Lambda64 --> PgSelectRows31 PgSelectRows38[["PgSelectRows[38∈1]"]]:::plan - PgSelect36 --> PgSelectRows38 + Lambda68{{"Lambda[68∈1]"}}:::plan + Lambda68 --> PgSelectRows38 PgSelectRows45[["PgSelectRows[45∈1]"]]:::plan - PgSelect43 --> PgSelectRows45 + Lambda72{{"Lambda[72∈1]"}}:::plan + Lambda72 --> PgSelectRows45 + PgSelect7 --> Access58 + List59 --> Lambda60 + PgSelect7 --> Access62 + List63 --> Lambda64 + PgSelect7 --> Access66 + List67 --> Lambda68 + PgSelect7 --> Access70 + List71 --> Lambda72 __Item22[/"__Item[22∈2]
ᐸ21ᐳ"\]:::itemplan PgSelectRows21 ==> __Item22 PgSelectSingle23{{"PgSelectSingle[23∈2]
ᐸpostᐳ"}}:::plan @@ -99,12 +121,12 @@ graph TD %% define steps subgraph "Buckets for queries/v4/simple-relations-head-tail" - Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 8, 9, 57, 58, 10, 26, 30
2: PgSelect[7], PgSelect[50]
3: PgSelectRows[11], PgSelectRows[52]"):::bucket + Bucket0("Bucket 0 (root)

1:
ᐳ: 6, 8, 9, 73, 74, 10, 26, 30
2: 50, 57, 61, 65, 69
3: PgSelect[7], PgSelectRows[52]
4: PgSelectRows[11]"):::bucket classDef bucket0 stroke:#696969 - class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,__InputObject26,ApplyInput30,PgSelect50,PgSelectRows52,Constant57,Constant58 bucket0 - Bucket1("Bucket 1 (listItem)
Deps: 10, 57, 6, 30

ROOT __Item{1}ᐸ11ᐳ[12]
1:
ᐳ: 13, 14, 15
2: 17, 28, 36, 43
3: 21, 31, 38, 45"):::bucket + class Bucket0,__Value2,__Value4,PgSelect7,Access8,Access9,Object10,PgSelectRows11,__InputObject26,ApplyInput30,PgSelect50,PgSelectRows52,PgSelectInlineApply57,PgSelectInlineApply61,PgSelectInlineApply65,PgSelectInlineApply69,Constant73,Constant74 bucket0 + Bucket1("Bucket 1 (listItem)
Deps: 7

ROOT __Item{1}ᐸ11ᐳ[12]
1:
ᐳ: 13, 58, 62, 66, 70, 14, 15, 59, 60, 63, 64, 67, 68, 71, 72
2: 21, 31, 38, 45"):::bucket classDef bucket1 stroke:#00bfff - class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgSelect17,PgSelectRows21,PgSelect28,PgSelectRows31,PgSelect36,PgSelectRows38,PgSelect43,PgSelectRows45 bucket1 + class Bucket1,__Item12,PgSelectSingle13,PgClassExpression14,PgClassExpression15,PgSelectRows21,PgSelectRows31,PgSelectRows38,PgSelectRows45,Access58,List59,Lambda60,Access62,List63,Lambda64,Access66,List67,Lambda68,Access70,List71,Lambda72 bucket1 Bucket2("Bucket 2 (listItem)

ROOT __Item{2}ᐸ21ᐳ[22]"):::bucket classDef bucket2 stroke:#7f007f class Bucket2,__Item22,PgSelectSingle23,PgClassExpression24,PgClassExpression25 bucket2 diff --git a/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.sql b/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.sql index 54de6a1516..e65eebebe2 100644 --- a/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.sql +++ b/postgraphile/postgraphile/__tests__/queries/v4/simple-relations-head-tail.sql @@ -1,71 +1,59 @@ -select - __person__."id"::text as "0", - __person__."person_full_name" as "1" -from "c"."person" as __person__ -order by __person__."id" asc; - select __compound_key__."person_id_1"::text as "0", __compound_key__."person_id_2"::text as "1" from "c"."compound_key" as __compound_key__ order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc; -select __post_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __post_identifiers__, -lateral ( - select - __post__."headline" as "0", - __post__."author_id"::text as "1", - __post_identifiers__.idx as "2" - from "a"."post" as __post__ - where ( - __post__."author_id" = __post_identifiers__."id0" - ) - order by __post__."id" asc - limit 2 -) as __post_result__; - -select __post_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($2::json) with ordinality as ids) as __post_identifiers__, -lateral ( - select - __post__."headline" as "0", - __post__."author_id"::text as "1", - __post_identifiers__.idx as "2" - from "a"."post" as __post__ - where - ( - __post__."author_id" = __post_identifiers__."id0" - ) and ( - __post__."headline" = $1::"text" +select + __person__."id"::text as "0", + __person__."person_full_name" as "1", + array( + select array[ + __post__."headline", + __post__."author_id"::text + ]::text[] + from "a"."post" as __post__ + where ( + __post__."author_id" = __person__."id" ) - order by __post__."id" asc -) as __post_result__; - -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_1" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; - -select __compound_key_result__.* -from (select ids.ordinality - 1 as idx, (ids.value->>0)::"int4" as "id0" from json_array_elements($1::json) with ordinality as ids) as __compound_key_identifiers__, -lateral ( - select - __compound_key__."person_id_1"::text as "0", - __compound_key__."person_id_2"::text as "1", - __compound_key_identifiers__.idx as "2" - from "c"."compound_key" as __compound_key__ - where ( - __compound_key__."person_id_2" = __compound_key_identifiers__."id0" - ) - order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc -) as __compound_key_result__; \ No newline at end of file + order by __post__."id" asc + limit 2 + )::text as "2", + array( + select array[ + __post_2."headline", + __post_2."author_id"::text + ]::text[] + from "a"."post" as __post_2 + where + ( + __post_2."author_id" = __person__."id" + ) and ( + __post_2."headline" = $1::"text" + ) + order by __post_2."id" asc + )::text as "3", + array( + select array[ + __compound_key__."person_id_1"::text, + __compound_key__."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key__ + where ( + __compound_key__."person_id_1" = __person__."id" + ) + order by __compound_key__."person_id_1" asc, __compound_key__."person_id_2" asc + )::text as "4", + array( + select array[ + __compound_key_2."person_id_1"::text, + __compound_key_2."person_id_2"::text + ]::text[] + from "c"."compound_key" as __compound_key_2 + where ( + __compound_key_2."person_id_2" = __person__."id" + ) + order by __compound_key_2."person_id_1" asc, __compound_key_2."person_id_2" asc + )::text as "5" +from "c"."person" as __person__ +order by __person__."id" asc; \ No newline at end of file