Demonstrate poor handling of cyclic datastructures #111
+57
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it
This PR is not meant to ever be merged. This is a demonstration of some broken behavior around handling datastructures with cyclic dependencies. The problem is if we provide a struct to
MarshalQueryWithOptions()
and that struct has cyclic fields, even if not populated, and even if we provide a Field that limits the output to a set depth,MarshalQueryWithOptions()
will still recurse infinitely and cause a panic due to exhausting the stack.This is a big problem because goql is a GraphQL library, and GraphQL is for querying graph datastructures, and datastructures in graphs will very commonly have cyclic relationships because graphs have cycles :)
The correct behavior would be to:
goql
via aFields
param.Fields
are provided, we can recursively walk already walked fields, but only to the depth specified in thoseFields
.Future work will have to be done to get this behavior to work.
Jira ID
No jira for this (yet)
Notes for your reviewers