graphql-engine/server/src-lib/Hasura/GraphQL/Schema
David Overton 346804fc67 Support nested object fields in DC API and use this to implement nest…
## Description

This change adds support for nested object fields in HGE IR and Schema Cache, the Data Connectors backend and API, and the MongoDB agent.

### Data Connector API changes

- The `/schema` endpoint response now includes an optional set of GraphQL type definitions. Table column types can refer to these definitions by name.
- Queries can now include a new field type `object` which contains a column name and a nested query. This allows querying into a nested object within a field.

### MongoDB agent changes

- Add support for querying into nested documents using the new `object` field type.

### HGE changes

- The `Backend` type class has a new type family `XNestedObjects b` which controls whether or not a backend supports querying into nested objects. This is currently enabled only for the `DataConnector` backend.
- For backends that support nested objects, the `FieldInfo` type gets a new constructor `FINestedObject`, and the `AnnFieldG` type gets a new constructor `AFNestedObject`.
- If the DC `/schema` endpoint returns any custom GraphQL type definitions they are stored in the `TableInfo` for each table in the source.
- During schema cache building, the function `addNonColumnFields` will check whether any column types match custom GraphQL object types stored in the `TableInfo`. If so, they are converted into `FINestedObject` instead of `FIColumn` in the `FieldInfoMap`.
- When building the `FieldParser`s from `FieldInfo` (function `fieldSelection`) any `FINestedObject` fields are converted into nested object parsers returning `AFNestedObject`.
- The `DataConnector` query planner converts `AFNestedObject` fields into `object` field types in the query sent to the agent.

## Limitations

### HGE not yet implemented:
- Support for nested arrays
- Support for nested objects/arrays in mutations
- Support for nested objects/arrays in order-by
- Support for filters (`where`) in nested objects/arrays
- Support for adding custom GraphQL types via track table metadata API
- Support for interface and union types
- Tests for nested objects

### Mongo agent not yet implemented:

- Generate nested object types from validation schema
- Support for aggregates
- Support for order-by
- Configure agent port
- Build agent in CI
- Agent tests for nested objects and MongoDB agent

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/7844
GitOrigin-RevId: aec9ec1e4216293286a68f9b1af6f3f5317db423
2023-04-11 01:30:37 +00:00
..
BoolExp server: fix naming convention bugs 2023-03-06 06:23:20 +00:00
Update server: fix naming convention bugs 2023-03-06 06:23:20 +00:00
Action.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
Backend.hs chore(server): move perms to custom return types 2023-04-04 12:46:51 +00:00
BoolExp.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
Build.hs Refactor Update IR to generalize Update vs Update Many across backends - compositional approach [GDC-687] 2023-01-10 01:56:14 +00:00
Common.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
Instances.hs Rename Data Wrapper to Data Connector [GDW-89] 2022-05-02 05:04:07 +00:00
Introspect.hs Upgrade Ormolu to v0.5. 2022-11-02 20:55:13 +00:00
Mutation.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
NamingCase.hs server: codec for SourceCustomization 2023-01-12 20:57:20 +00:00
Node.hs server: reduce schema contexts to the bare minimum 2022-11-17 10:35:54 +00:00
Options.hs [server]: feature flag to remove _stream fields from schema 2022-11-04 13:10:35 +00:00
OrderBy.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
Parser.hs refactor(tests): Expose more Parser types in Hasura.GraphQL.Schema.Parser 2022-09-08 13:57:18 +00:00
Postgres.hs server: reduce schema contexts to the bare minimum 2022-11-17 10:35:54 +00:00
Relay.hs server: reduce schema contexts to the bare minimum 2022-11-17 10:35:54 +00:00
Remote.hs server: fix bug with customized remote schema enum variables 2022-11-24 08:47:46 +00:00
RemoteRelationship.hs server: enable remote schema to remote schema relationship for unauthenticated context 2023-04-10 13:35:38 +00:00
Select.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
SubscriptionStream.hs server: fix streaming subscription input type names 2022-11-30 06:48:58 +00:00
Table.hs Support nested object fields in DC API and use this to implement nest… 2023-04-11 01:30:37 +00:00
Typename.hs server: reduce schema contexts to the bare minimum 2022-11-17 10:35:54 +00:00
Update.hs Refactor Update IR to generalize Update vs Update Many across backends - compositional approach [GDC-687] 2023-01-10 01:56:14 +00:00