Comments (4)
Extra note upon further reflection
Its clear that the flattened variant actually is not feasible. This is because, a key requirement is to be able to filter on the state encoded using the OpenCrud functionality of the resulting API, and that is not possible. A specific example: its not possible to only select married persons, that is an encoding with the case MarriedTo
, you could only filter on a person a married to some other specific person for some number of years MarriedTo(/*Spouce */ Person, /* years married*/ u32),
, which is useless.
Conclusion: Flatten is not feasible
This then begs the question of how things works out in the fourth alternative. Here one would have to radically extend the OpenCrud interface generated to incoroprate some sort of matching functionality, similar to the ... on Variant {}
capability native to GraphQL on union types. While in principle I don't see it cannot be done, I would not be surprised if it cannot, but more importantly: it will involve a great deal of work.
Conclusion: Intoducing algebraic types, even if possible, will be extremly time consuming
from hydra.
Extra note v2.0:
It is actually possible to sidestep the heavy work on the API side, described on the prior issue if we expose the low-level database fields that encode what variants are active, and also the payload fields. This means the end-user will get a representation which is the union of approach 2 and 4 above.
from hydra.
We decided that, we will go with approach 2 for now, then see how hard that is to work with before we invest in anything else.
from hydra.
Algebraic types were introduced with certain limitations: https://dzhelezov.gitbook.io/hydra/docs/schema-spec/variant-types
from hydra.
Related Issues (20)
- Add DELETE CASCADE feature in Hydra HOT 1
- QN typeguard for relation loading
- Every filter on array relations fails when there is only one entity matching params HOT 1
- Sometime `Float` are generated from `BigInt`
- Upgrade hydra-typegen to support metadata v14 (type definitions in the metadata)
- Deterministic IDs - take entity deletions into account
- CI tests failing
- DatabaseManager.get() - return `null` instead of `undefined` on empty result
- orderBy argument for connection queries accepting wrong value
- Array of enums not supported
- Kusama playground is not reachable HOT 2
- Publish final changelog and version bump in `Ephesus` HOT 1
- Bug: `BigInt` fields in `variant` are being converted to `Float` in output schema HOT 1
- Bug: hydra might skip processing some events when hydra crashes unexpectedly processing a block and then start from the next block HOT 1
- Don't use `utils.promisify(dns.lookup)` as OpenTelemetey's DNS instrumentation can't patch such function properly
- e2e-test broken
- Public endpoint for graphql server needs protection
- Multi-arch docker images
- Decode failure on runtime upgrade
- Bound query execution time
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hydra.