evo-company / hiku

Library to write servers for GraphQL-like query languages
http://hiku.readthedocs.io
BSD 3-Clause "New" or "Revised" License
60 stars 12 forks source link

rewrite fragments #152

Closed kindermax closed 2 weeks ago

kindermax commented 3 weeks ago

In this PR we addressed the issue with broken fragments merging. Historically, hiku had no support for unions/interfaces so fragment merging was ok. But things went in the wrong direction after we added unions/interfaces support + fragments support.

Fragments merging (fields merging to be more accurate) has its rules in graphql spec, and we did not comply to them. So why thought ?

Hiku architecture was built without fragments in mind, that is - engine and denormalization modules could not work with fragments. So to avoid complex rewriting of the engine and denormalization modules, we decided to merge fragments to avoid field duplication - the hardest thing to support in the engine.

In this PR, we try to mimic graphql-py behavior or merging fields:

So basically we moved handling of fields merging to engine/denormalization stage and simplified parsing.

Some other changes: