Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PgSelect now yields an object, not an array #2335

Merged
merged 51 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d5cc977
Disable PgSelect optimizations, don't check for them in tests
benjie Jan 22, 2025
bb68221
Update snapshots to reflect lack of optimization
benjie Jan 22, 2025
05df6f5
Change PgUnionAllStep and PgSelectStep to NOT yield arrays, and inste…
benjie Jan 22, 2025
21bc12a
Introduce new convention for $step.items() to access lists from
benjie Jan 22, 2025
1d247e1
Have Grafast automatically call items() when handling list types
benjie Jan 22, 2025
6bafc82
Smooth error handling
benjie Jan 22, 2025
823af26
When accessing items be sure to do it in a layerPlan
benjie Jan 22, 2025
1b1ee77
Pass streamDetails to the .items() method
benjie Jan 22, 2025
adbbd2c
Combine stream and execute into one function
benjie Jan 23, 2025
c6ac217
Remove more isStreamableStep/StreamableStep
benjie Jan 23, 2025
93ae796
Fix various types/etc
benjie Jan 23, 2025
d56992d
More type fixes
benjie Jan 23, 2025
aa20ab6
Punt the conditional up a level
benjie Jan 23, 2025
943046a
Restore previous formatting/code
benjie Jan 23, 2025
b9e11d1
Start tracking stream initialCount/if/label via steps rather than eva…
benjie Jan 23, 2025
c42df45
Track internal dependence on stream variables
benjie Jan 23, 2025
aa9b366
listItem plan may be deferred
benjie Jan 23, 2025
89b05f4
TODO
benjie Jan 23, 2025
cd3781a
Always handle async iterables
benjie Jan 23, 2025
04a7171
PgSelectRowsStep is not 'isSyncAndSafe' since the parent step may yie…
benjie Jan 23, 2025
43f6124
Rework _streamOptions to use steps rather than eval'd values
benjie Jan 24, 2025
86430e4
Change where internal dependencies are added
benjie Jan 24, 2025
c54f87c
Tweak API of step.items() method
benjie Jan 24, 2025
b3adf6e
When performing .items() be sure to copy stream options across
benjie Jan 24, 2025
3068039
Don't dedupe internal dependencies
benjie Jan 24, 2025
00e39cf
Output path for error
benjie Jan 24, 2025
5f923e0
Don't pass 'stream' to 'optimize' lifecycle method
benjie Jan 24, 2025
cc74e57
Only walk iterables when in a sensible location to do so
benjie Jan 24, 2025
270b371
Update shape of pgUnionAll
benjie Jan 24, 2025
9f9b421
Return the passed in listStep when calling getListStep()
benjie Jan 24, 2025
eb50c93
Fix getting class step for union
benjie Jan 24, 2025
8fe5e20
Update mermaid plans
benjie Jan 24, 2025
f3c5a12
Update SQL snapshots
benjie Jan 24, 2025
30b6559
TypeScript cannot handle the more accurate type; move it
benjie Jan 24, 2025
23bbd35
Fix test
benjie Jan 24, 2025
5e6256c
Fix empty result
benjie Jan 24, 2025
56b445e
Fix bad optimization in PgUnionAllStep
benjie Jan 24, 2025
c222fc8
Update mermaid plans
benjie Jan 24, 2025
b105e67
Update unnecessary SQL change
benjie Jan 24, 2025
0487290
Don't pass stream details to items() [might revert later]
benjie Jan 24, 2025
37a479c
Add not in docs about items() arguments
benjie Jan 24, 2025
021afd1
Lint
benjie Jan 24, 2025
37f2827
Update plans
benjie Jan 24, 2025
ca5bc1a
docs(changeset): New items() convention method allows steps used in l…
benjie Jan 24, 2025
ef4cf75
docs(changeset): stream() method has been completely removed and exec…
benjie Jan 24, 2025
c59132e
docs(changeset): Moved calculation of `@stream` parameters to runtime…
benjie Jan 24, 2025
2f31836
docs(changeset): PgSelectStep and PgUnionAllStep now return objects r…
benjie Jan 24, 2025
72b300b
docs(changeset): PgSelectStep's stream behavior updated to match the …
benjie Jan 24, 2025
82ff759
Tidy
benjie Feb 4, 2025
f4764df
Only evaluate isAsyncIterable if walkIterable is set
benjie Feb 4, 2025
13a1219
Remove unused type
benjie Feb 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .changeset/odd-flowers-obey.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"postgraphile": patch
"@dataplan/pg": patch
---

PgSelectStep and PgUnionAllStep now return objects rather than arrays/streams;
thanks to the new Grafast .items() method and these classes being "opaque" steps
this is _mostly_ a non-breaking change.
7 changes: 7 additions & 0 deletions .changeset/plenty-singers-call.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"grafast": patch
---

Moved calculation of `@stream` parameters to runtime, which has meant that
stream info is no longer passed at planning time - instead execute() can
evaluate if it is being streamed or not and make decisions based on that.
6 changes: 6 additions & 0 deletions .changeset/stale-ears-pull.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"postgraphile": patch
"@dataplan/pg": patch
---

PgSelectStep's stream behavior updated to match the latest logic in Grafast.
6 changes: 6 additions & 0 deletions .changeset/tame-rings-search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"grafast": patch
---

stream() method has been completely removed and execute() now handles both
stream() and defer() concerns.
7 changes: 7 additions & 0 deletions .changeset/tricky-actors-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"grafast": patch
---

New items() convention method allows steps used in list positions to return a
_different_ step to actually return the list - useful for returning
connection-capable steps in list positions.
6 changes: 5 additions & 1 deletion grafast/dataplan-pg/__tests__/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ export async function runTestQuery(
if (!checkErrorSnapshots && errors) {
const originalError = result.errors?.[0]?.originalError;
console.error(originalError || errors[0]);
console.error("Occurred at", errors[0].path);
}
if (options.callback) {
throw new Error(
Expand Down Expand Up @@ -549,10 +550,13 @@ export const assertSnapshotsMatch = async (
const planOp = extensions?.explain?.operations?.find(
(op) => op.type === "plan",
);
if (!planOp) {
throw new Error("No plan was emitted for this test!");
}
const graphString = planToMermaid(planOp.plan);
const mermaidFileName = basePath + (ext || "") + ".mermaid";
if (!graphString) {
throw new Error("No plan was emitted for this test!");
throw new Error("Was unable to generate plan diagram for this test!");
}
const lines = graphString.split("\n");
const relativePath = relative(__dirname, basePath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,76 +9,78 @@ graph TD


%% plan dependencies
Object43{{"Object[43∈0] ➊<br />ᐸ{reverse,orders,alias,codec}ᐳ"}}:::plan
Lambda35{{"Lambda[35∈0] ➊<br />ᐸcalculateShouldReverseOrderᐳ"}}:::plan
Constant40{{"Constant[40∈0] ➊<br />ᐸ[]ᐳ"}}:::plan
Constant41{{"Constant[41∈0] ➊<br />ᐸsql.identifier(”relational_posts”)ᐳ"}}:::plan
Constant42{{"Constant[42∈0] ➊<br />ᐸRecordCodec(relational_posts)ᐳ"}}:::plan
Lambda35 & Constant40 & Constant41 & Constant42 --> Object43
Object44{{"Object[44∈0] ➊<br />ᐸ{reverse,orders,alias,codec}ᐳ"}}:::plan
Lambda36{{"Lambda[36∈0] ➊<br />ᐸcalculateShouldReverseOrderᐳ"}}:::plan
Constant41{{"Constant[41∈0] ➊<br />ᐸ[]ᐳ"}}:::plan
Constant42{{"Constant[42∈0] ➊<br />ᐸsql.identifier(”relational_posts”)ᐳ"}}:::plan
Constant43{{"Constant[43∈0] ➊<br />ᐸRecordCodec(relational_posts)ᐳ"}}:::plan
Lambda36 & Constant41 & Constant42 & Constant43 --> Object44
Object15{{"Object[15∈0] ➊<br />ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan
Access13{{"Access[13∈0] ➊<br />ᐸ2.pgSettingsᐳ"}}:::plan
Access14{{"Access[14∈0] ➊<br />ᐸ2.withPgClientᐳ"}}:::plan
Access13 & Access14 --> Object15
__Value2["__Value[2∈0] ➊<br />ᐸcontextᐳ"]:::plan
__Value2 --> Access13
__Value2 --> Access14
Constant52{{"Constant[52∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant52 --> Lambda35
Lambda38{{"Lambda[38∈0] ➊<br />ᐸcalculateLimitAndOffsetSQLᐳ"}}:::plan
Constant53{{"Constant[53∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant53 --> Lambda38
Access39{{"Access[39∈0] ➊<br />ᐸ38.0ᐳ"}}:::plan
Lambda38 --> Access39
Lambda44{{"Lambda[44∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Object43 --> Lambda44
Lambda49{{"Lambda[49∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Constant54{{"Constant[54∈0] ➊<br />ᐸ§{ reverse: false, orders: [], alias: sql.identifier(”relatiᐳ"}}:::plan
Constant54 --> Lambda49
Constant53 --> Lambda36
Lambda39{{"Lambda[39∈0] ➊<br />ᐸcalculateLimitAndOffsetSQLᐳ"}}:::plan
Constant54{{"Constant[54∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant54 --> Lambda39
Access40{{"Access[40∈0] ➊<br />ᐸ39.0ᐳ"}}:::plan
Lambda39 --> Access40
Lambda45{{"Lambda[45∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Object44 --> Lambda45
Lambda50{{"Lambda[50∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Constant55{{"Constant[55∈0] ➊<br />ᐸ§{ reverse: false, orders: [], alias: sql.identifier(”relatiᐳ"}}:::plan
Constant55 --> Lambda50
__Value4["__Value[4∈0] ➊<br />ᐸrootValueᐳ"]:::plan
Constant10{{"Constant[10∈0] ➊<br />ᐸ'POST'ᐳ"}}:::plan
Constant11{{"Constant[11∈0] ➊<br />ᐸ2ᐳ"}}:::plan
Constant50{{"Constant[50∈0] ➊<br />ᐸ'My Relational Post'ᐳ"}}:::plan
Constant51{{"Constant[51∈0] ➊<br />ᐸ'Such a great post.'ᐳ"}}:::plan
Constant51{{"Constant[51∈0] ➊<br />ᐸ'My Relational Post'ᐳ"}}:::plan
Constant52{{"Constant[52∈0] ➊<br />ᐸ'Such a great post.'ᐳ"}}:::plan
PgInsertSingle17[["PgInsertSingle[17∈1] ➊<br />ᐸrelational_posts(id,title,note)ᐳ"]]:::sideeffectplan
PgClassExpression16{{"PgClassExpression[16∈1] ➊<br />ᐸ__relation...ems__.”id”ᐳ"}}:::plan
Object15 & PgClassExpression16 & Constant50 & Constant51 --> PgInsertSingle17
Object15 & PgClassExpression16 & Constant51 & Constant52 --> PgInsertSingle17
PgInsertSingle12[["PgInsertSingle[12∈1] ➊<br />ᐸrelational_items(type,author_id)ᐳ"]]:::sideeffectplan
Object15 & Constant10 & Constant11 --> PgInsertSingle12
PgInsertSingle12 --> PgClassExpression16
PgClassExpression21{{"PgClassExpression[21∈1] ➊<br />ᐸ__relational_posts__ᐳ"}}:::plan
PgInsertSingle17 --> PgClassExpression21
PgSelect23[["PgSelect[23∈2] ➊<br />ᐸrelational_postsᐳ"]]:::plan
PgClassExpression22{{"PgClassExpression[22∈2] ➊<br />ᐸ(__relatio...ts__).”id”ᐳ"}}:::plan
Object15 & PgClassExpression22 & Lambda35 & Access39 & Lambda44 & Lambda49 --> PgSelect23
Object15 & PgClassExpression22 & Lambda36 & Access40 & Lambda45 & Lambda50 --> PgSelect23
PgInsertSingle17 --> PgClassExpression22
First27{{"First[27∈2] ➊"}}:::plan
PgSelect23 --> First27
PgSelectSingle28{{"PgSelectSingle[28∈2] ➊<br />ᐸrelational_postsᐳ"}}:::plan
First27 --> PgSelectSingle28
PgClassExpression29{{"PgClassExpression[29∈3] ➊<br />ᐸ__relation...sts__.”id”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression29
PgClassExpression30{{"PgClassExpression[30∈3] ➊<br />ᐸ__relation...__.”title”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression30
PgClassExpression31{{"PgClassExpression[31∈3] ➊<br />ᐸ__relation...scription”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression31
PgClassExpression32{{"PgClassExpression[32∈3] ➊<br />ᐸ__relation...s__.”note”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression32
PgSelectRows28[["PgSelectRows[28∈2] ➊"]]:::plan
PgSelectRows28 --> First27
PgSelect23 --> PgSelectRows28
PgSelectSingle29{{"PgSelectSingle[29∈2] ➊<br />ᐸrelational_postsᐳ"}}:::plan
First27 --> PgSelectSingle29
PgClassExpression30{{"PgClassExpression[30∈3] ➊<br />ᐸ__relation...sts__.”id”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression30
PgClassExpression31{{"PgClassExpression[31∈3] ➊<br />ᐸ__relation...__.”title”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression31
PgClassExpression32{{"PgClassExpression[32∈3] ➊<br />ᐸ__relation...scription”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression32
PgClassExpression33{{"PgClassExpression[33∈3] ➊<br />ᐸ__relation...s__.”note”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression33

%% define steps

subgraph "Buckets for mutations/basics/create-relational-post-default-description"
Bucket0("Bucket 0 (root)"):::bucket
classDef bucket0 stroke:#696969
class Bucket0,__Value2,__Value4,Constant10,Constant11,Access13,Access14,Object15,Lambda35,Lambda38,Access39,Constant40,Constant41,Constant42,Object43,Lambda44,Lambda49,Constant50,Constant51,Constant52,Constant53,Constant54 bucket0
Bucket1("Bucket 1 (mutationField)<br />Deps: 15, 10, 11, 50, 51, 35, 39, 44, 49<br /><br />1: PgInsertSingle[12]<br />2: PgClassExpression[16]<br />3: PgInsertSingle[17]<br />4: <br />ᐳ: PgClassExpression[21]"):::bucket
class Bucket0,__Value2,__Value4,Constant10,Constant11,Access13,Access14,Object15,Lambda36,Lambda39,Access40,Constant41,Constant42,Constant43,Object44,Lambda45,Lambda50,Constant51,Constant52,Constant53,Constant54,Constant55 bucket0
Bucket1("Bucket 1 (mutationField)<br />Deps: 15, 10, 11, 51, 52, 36, 40, 45, 50<br /><br />1: PgInsertSingle[12]<br />2: PgClassExpression[16]<br />3: PgInsertSingle[17]<br />4: <br />ᐳ: PgClassExpression[21]"):::bucket
classDef bucket1 stroke:#00bfff
class Bucket1,PgInsertSingle12,PgClassExpression16,PgInsertSingle17,PgClassExpression21 bucket1
Bucket2("Bucket 2 (nullableBoundary)<br />Deps: 17, 15, 35, 39, 44, 49, 21<br /><br />ROOT PgClassExpression{1}ᐸ__relational_posts__ᐳ[21]<br />1: <br />ᐳ: PgClassExpression[22]<br />2: PgSelect[23]<br />ᐳ: First[27], PgSelectSingle[28]"):::bucket
Bucket2("Bucket 2 (nullableBoundary)<br />Deps: 17, 15, 36, 40, 45, 50, 21<br /><br />ROOT PgClassExpression{1}ᐸ__relational_posts__ᐳ[21]<br />1: <br />ᐳ: PgClassExpression[22]<br />2: PgSelect[23]<br />3: PgSelectRows[28]<br />ᐳ: First[27], PgSelectSingle[29]"):::bucket
classDef bucket2 stroke:#7f007f
class Bucket2,PgClassExpression22,PgSelect23,First27,PgSelectSingle28 bucket2
Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 28<br /><br />ROOT PgSelectSingle{2}ᐸrelational_postsᐳ[28]"):::bucket
class Bucket2,PgClassExpression22,PgSelect23,First27,PgSelectRows28,PgSelectSingle29 bucket2
Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 29<br /><br />ROOT PgSelectSingle{2}ᐸrelational_postsᐳ[29]"):::bucket
classDef bucket3 stroke:#ffa500
class Bucket3,PgClassExpression29,PgClassExpression30,PgClassExpression31,PgClassExpression32 bucket3
class Bucket3,PgClassExpression30,PgClassExpression31,PgClassExpression32,PgClassExpression33 bucket3
Bucket0 --> Bucket1
Bucket1 --> Bucket2
Bucket2 --> Bucket3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,76 +9,78 @@ graph TD


%% plan dependencies
Object43{{"Object[43∈0] ➊<br />ᐸ{reverse,orders,alias,codec}ᐳ"}}:::plan
Lambda35{{"Lambda[35∈0] ➊<br />ᐸcalculateShouldReverseOrderᐳ"}}:::plan
Constant40{{"Constant[40∈0] ➊<br />ᐸ[]ᐳ"}}:::plan
Constant41{{"Constant[41∈0] ➊<br />ᐸsql.identifier(”relational_posts”)ᐳ"}}:::plan
Constant42{{"Constant[42∈0] ➊<br />ᐸRecordCodec(relational_posts)ᐳ"}}:::plan
Lambda35 & Constant40 & Constant41 & Constant42 --> Object43
Object44{{"Object[44∈0] ➊<br />ᐸ{reverse,orders,alias,codec}ᐳ"}}:::plan
Lambda36{{"Lambda[36∈0] ➊<br />ᐸcalculateShouldReverseOrderᐳ"}}:::plan
Constant41{{"Constant[41∈0] ➊<br />ᐸ[]ᐳ"}}:::plan
Constant42{{"Constant[42∈0] ➊<br />ᐸsql.identifier(”relational_posts”)ᐳ"}}:::plan
Constant43{{"Constant[43∈0] ➊<br />ᐸRecordCodec(relational_posts)ᐳ"}}:::plan
Lambda36 & Constant41 & Constant42 & Constant43 --> Object44
Object15{{"Object[15∈0] ➊<br />ᐸ{pgSettings,withPgClient}ᐳ"}}:::plan
Access13{{"Access[13∈0] ➊<br />ᐸ2.pgSettingsᐳ"}}:::plan
Access14{{"Access[14∈0] ➊<br />ᐸ2.withPgClientᐳ"}}:::plan
Access13 & Access14 --> Object15
__Value2["__Value[2∈0] ➊<br />ᐸcontextᐳ"]:::plan
__Value2 --> Access13
__Value2 --> Access14
Constant52{{"Constant[52∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant52 --> Lambda35
Lambda38{{"Lambda[38∈0] ➊<br />ᐸcalculateLimitAndOffsetSQLᐳ"}}:::plan
Constant53{{"Constant[53∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant53 --> Lambda38
Access39{{"Access[39∈0] ➊<br />ᐸ38.0ᐳ"}}:::plan
Lambda38 --> Access39
Lambda44{{"Lambda[44∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Object43 --> Lambda44
Lambda49{{"Lambda[49∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Constant54{{"Constant[54∈0] ➊<br />ᐸ§{ reverse: false, orders: [], alias: sql.identifier(”relatiᐳ"}}:::plan
Constant54 --> Lambda49
Constant53 --> Lambda36
Lambda39{{"Lambda[39∈0] ➊<br />ᐸcalculateLimitAndOffsetSQLᐳ"}}:::plan
Constant54{{"Constant[54∈0] ➊<br />ᐸ§{ first: null, last: null, cursorLower: null, cursorUpper: ᐳ"}}:::plan
Constant54 --> Lambda39
Access40{{"Access[40∈0] ➊<br />ᐸ39.0ᐳ"}}:::plan
Lambda39 --> Access40
Lambda45{{"Lambda[45∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Object44 --> Lambda45
Lambda50{{"Lambda[50∈0] ➊<br />ᐸcalculateOrderBySQLᐳ"}}:::plan
Constant55{{"Constant[55∈0] ➊<br />ᐸ§{ reverse: false, orders: [], alias: sql.identifier(”relatiᐳ"}}:::plan
Constant55 --> Lambda50
__Value4["__Value[4∈0] ➊<br />ᐸrootValueᐳ"]:::plan
Constant10{{"Constant[10∈0] ➊<br />ᐸ'POST'ᐳ"}}:::plan
Constant11{{"Constant[11∈0] ➊<br />ᐸ2ᐳ"}}:::plan
Constant50{{"Constant[50∈0] ➊<br />ᐸ'My Relational Post'ᐳ"}}:::plan
Constant51{{"Constant[51∈0] ➊<br />ᐸ'Such a great post.'ᐳ"}}:::plan
Constant51{{"Constant[51∈0] ➊<br />ᐸ'My Relational Post'ᐳ"}}:::plan
Constant52{{"Constant[52∈0] ➊<br />ᐸ'Such a great post.'ᐳ"}}:::plan
PgInsertSingle17[["PgInsertSingle[17∈1] ➊<br />ᐸrelational_posts(id,title,note)ᐳ"]]:::sideeffectplan
PgClassExpression16{{"PgClassExpression[16∈1] ➊<br />ᐸ__relation...ems__.”id”ᐳ"}}:::plan
Object15 & PgClassExpression16 & Constant50 & Constant51 --> PgInsertSingle17
Object15 & PgClassExpression16 & Constant51 & Constant52 --> PgInsertSingle17
PgInsertSingle12[["PgInsertSingle[12∈1] ➊<br />ᐸrelational_items(type,author_id)ᐳ"]]:::sideeffectplan
Object15 & Constant10 & Constant11 --> PgInsertSingle12
PgInsertSingle12 --> PgClassExpression16
PgClassExpression21{{"PgClassExpression[21∈1] ➊<br />ᐸ__relational_posts__ᐳ"}}:::plan
PgInsertSingle17 --> PgClassExpression21
PgSelect23[["PgSelect[23∈2] ➊<br />ᐸrelational_postsᐳ"]]:::plan
PgClassExpression22{{"PgClassExpression[22∈2] ➊<br />ᐸ(__relatio...ts__).”id”ᐳ"}}:::plan
Object15 & PgClassExpression22 & Lambda35 & Access39 & Lambda44 & Lambda49 --> PgSelect23
Object15 & PgClassExpression22 & Lambda36 & Access40 & Lambda45 & Lambda50 --> PgSelect23
PgInsertSingle17 --> PgClassExpression22
First27{{"First[27∈2] ➊"}}:::plan
PgSelect23 --> First27
PgSelectSingle28{{"PgSelectSingle[28∈2] ➊<br />ᐸrelational_postsᐳ"}}:::plan
First27 --> PgSelectSingle28
PgClassExpression29{{"PgClassExpression[29∈3] ➊<br />ᐸ__relation...sts__.”id”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression29
PgClassExpression30{{"PgClassExpression[30∈3] ➊<br />ᐸ__relation...__.”title”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression30
PgClassExpression31{{"PgClassExpression[31∈3] ➊<br />ᐸ__relation...scription”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression31
PgClassExpression32{{"PgClassExpression[32∈3] ➊<br />ᐸ__relation...s__.”note”ᐳ"}}:::plan
PgSelectSingle28 --> PgClassExpression32
PgSelectRows28[["PgSelectRows[28∈2] ➊"]]:::plan
PgSelectRows28 --> First27
PgSelect23 --> PgSelectRows28
PgSelectSingle29{{"PgSelectSingle[29∈2] ➊<br />ᐸrelational_postsᐳ"}}:::plan
First27 --> PgSelectSingle29
PgClassExpression30{{"PgClassExpression[30∈3] ➊<br />ᐸ__relation...sts__.”id”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression30
PgClassExpression31{{"PgClassExpression[31∈3] ➊<br />ᐸ__relation...__.”title”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression31
PgClassExpression32{{"PgClassExpression[32∈3] ➊<br />ᐸ__relation...scription”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression32
PgClassExpression33{{"PgClassExpression[33∈3] ➊<br />ᐸ__relation...s__.”note”ᐳ"}}:::plan
PgSelectSingle29 --> PgClassExpression33

%% define steps

subgraph "Buckets for mutations/basics/create-relational-post-default-description"
Bucket0("Bucket 0 (root)"):::bucket
classDef bucket0 stroke:#696969
class Bucket0,__Value2,__Value4,Constant10,Constant11,Access13,Access14,Object15,Lambda35,Lambda38,Access39,Constant40,Constant41,Constant42,Object43,Lambda44,Lambda49,Constant50,Constant51,Constant52,Constant53,Constant54 bucket0
Bucket1("Bucket 1 (mutationField)<br />Deps: 15, 10, 11, 50, 51, 35, 39, 44, 49<br /><br />1: PgInsertSingle[12]<br />2: PgClassExpression[16]<br />3: PgInsertSingle[17]<br />4: <br />ᐳ: PgClassExpression[21]"):::bucket
class Bucket0,__Value2,__Value4,Constant10,Constant11,Access13,Access14,Object15,Lambda36,Lambda39,Access40,Constant41,Constant42,Constant43,Object44,Lambda45,Lambda50,Constant51,Constant52,Constant53,Constant54,Constant55 bucket0
Bucket1("Bucket 1 (mutationField)<br />Deps: 15, 10, 11, 51, 52, 36, 40, 45, 50<br /><br />1: PgInsertSingle[12]<br />2: PgClassExpression[16]<br />3: PgInsertSingle[17]<br />4: <br />ᐳ: PgClassExpression[21]"):::bucket
classDef bucket1 stroke:#00bfff
class Bucket1,PgInsertSingle12,PgClassExpression16,PgInsertSingle17,PgClassExpression21 bucket1
Bucket2("Bucket 2 (nullableBoundary)<br />Deps: 17, 15, 35, 39, 44, 49, 21<br /><br />ROOT PgClassExpression{1}ᐸ__relational_posts__ᐳ[21]<br />1: <br />ᐳ: PgClassExpression[22]<br />2: PgSelect[23]<br />ᐳ: First[27], PgSelectSingle[28]"):::bucket
Bucket2("Bucket 2 (nullableBoundary)<br />Deps: 17, 15, 36, 40, 45, 50, 21<br /><br />ROOT PgClassExpression{1}ᐸ__relational_posts__ᐳ[21]<br />1: <br />ᐳ: PgClassExpression[22]<br />2: PgSelect[23]<br />3: PgSelectRows[28]<br />ᐳ: First[27], PgSelectSingle[29]"):::bucket
classDef bucket2 stroke:#7f007f
class Bucket2,PgClassExpression22,PgSelect23,First27,PgSelectSingle28 bucket2
Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 28<br /><br />ROOT PgSelectSingle{2}ᐸrelational_postsᐳ[28]"):::bucket
class Bucket2,PgClassExpression22,PgSelect23,First27,PgSelectRows28,PgSelectSingle29 bucket2
Bucket3("Bucket 3 (nullableBoundary)<br />Deps: 29<br /><br />ROOT PgSelectSingle{2}ᐸrelational_postsᐳ[29]"):::bucket
classDef bucket3 stroke:#ffa500
class Bucket3,PgClassExpression29,PgClassExpression30,PgClassExpression31,PgClassExpression32 bucket3
class Bucket3,PgClassExpression30,PgClassExpression31,PgClassExpression32,PgClassExpression33 bucket3
Bucket0 --> Bucket1
Bucket1 --> Bucket2
Bucket2 --> Bucket3
Expand Down
Loading