Commit bab60b7
committed
Demonstrate poor handling of cyclic datastructures
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:
1. If no Fields are provided, do not recursively walk into fields of
structs that've already been walked. This is safe to do because
GraphQL already doesn't allow infinite expansion; if you want
relationships, even recursive ones, to a particular depth then GQL
will force you to specify that in your query. Thus we can assume that
you'll have to specify that to `goql` via a `Fields` param.
2. If `Fields` *are* provided, we can recursively walk already walked
fields, but only to the depth specified in those `Fields`.
Future work will have to be done to get this behavior to work.1 parent 45e8fe0 commit bab60b7
1 file changed
+30
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
10 | 20 | | |
11 | 21 | | |
12 | 22 | | |
| |||
321 | 331 | | |
322 | 332 | | |
323 | 333 | | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
324 | 354 | | |
325 | 355 | | |
326 | 356 | | |
| |||
0 commit comments