Skip to content

Instantly share code, notes, and snippets.

@conradludgate
Last active February 11, 2023 12:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save conradludgate/68163d5b0626ab0ed0c1208603a16ce0 to your computer and use it in GitHub Desktop.
Save conradludgate/68163d5b0626ab0ed0c1208603a16ce0 to your computer and use it in GitHub Desktop.
trustfall query plan recursion
QueryPlan {
plan: [
GetStartingTokens {
edge: "LatestStory",
vid: Vid(
1,
),
},
ProjectProperty {
type_name: "Story",
vid: Vid(
1,
),
field_name: "url",
},
Filter(
IsNotNull,
),
Record(
Vid(
1,
),
),
Activate(
Vid(
1,
),
),
Expand {
optional: false,
neighbors: ProjectNeighbors {
type_name: "Story",
edge_name: "comment",
parameters: None,
eid: Eid(
1,
),
vid: Vid(
1,
),
},
},
Record(
Vid(
2,
),
),
SuspendNone,
Activate(
Vid(
2,
),
),
Recurse {
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "reply",
parameters: None,
eid: Eid(
2,
),
vid: Vid(
2,
),
},
},
Recurse {
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "reply",
parameters: None,
eid: Eid(
2,
),
vid: Vid(
2,
),
},
},
Recurse {
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "reply",
parameters: None,
eid: Eid(
2,
),
vid: Vid(
2,
),
},
},
Recurse {
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "reply",
parameters: None,
eid: Eid(
2,
),
vid: Vid(
2,
),
},
},
Recurse {
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "reply",
parameters: None,
eid: Eid(
2,
),
vid: Vid(
2,
),
},
},
RecursePostProcess,
Record(
Vid(
3,
),
),
Activate(
Vid(
3,
),
),
Expand {
optional: false,
neighbors: ProjectNeighbors {
type_name: "Comment",
edge_name: "byUser",
parameters: None,
eid: Eid(
3,
),
vid: Vid(
3,
),
},
},
ProjectProperty {
type_name: "User",
vid: Vid(
4,
),
field_name: "karma",
},
Argument(
"min_karma",
),
Filter(
GreaterThanOrEqual(
Variable(
VariableRef {
variable_name: "min_karma",
variable_type: Type {
base: Named(
Name(
"Int",
),
),
nullable: false,
},
},
),
),
),
Record(
Vid(
4,
),
),
MoveTo(
Vid(
3,
),
),
ProjectProperty {
type_name: "Comment",
vid: Vid(
3,
),
field_name: "text",
},
MoveTo(
Vid(
4,
),
),
ProjectProperty {
type_name: "User",
vid: Vid(
4,
),
field_name: "id",
},
MoveTo(
Vid(
4,
),
),
ProjectProperty {
type_name: "User",
vid: Vid(
4,
),
field_name: "karma",
},
MoveTo(
Vid(
1,
),
),
ProjectProperty {
type_name: "Story",
vid: Vid(
1,
),
field_name: "score",
},
MoveTo(
Vid(
1,
),
),
ProjectProperty {
type_name: "Story",
vid: Vid(
1,
),
field_name: "title",
},
MoveTo(
Vid(
1,
),
),
ProjectProperty {
type_name: "Story",
vid: Vid(
1,
),
field_name: "url",
},
CollectOutputs(
[
"comment",
"commenter",
"commenter_karma",
"score",
"title",
"url",
],
),
],
}
{
LatestStory(max: 100) {
title @output
url @filter(op: "is_not_null") @output
score @output
comment {
reply @recurse(depth: 5) {
comment: text @output
byUser {
commenter: id @output
commenter_karma: karma @filter(op: ">=", value: ["$min_karma"]) @output
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment