From f255b5e48aef044b50a546ee0d737c2528d7b7e7 Mon Sep 17 00:00:00 2001 From: Daniel Chambers Date: Wed, 13 Nov 2024 23:05:42 +1100 Subject: [PATCH] Nested relationships: Refactor capabilities, add engine test, fix docker compose engine metadata (#1341) ### What This PR does three related things: * Adds an execution test that tests that nested relationships work in field selection in Postgres (taken from #935) * Refactors the way capabilities are handled in metadata resolve to account for difference between NDC 0.1.x and 0.2.x. Specifically, NDC 0.1.x connectors are assumed to support nested relationships in field selection, but do not support them in filtering and ordering. Whereas in NDC 0.2.x, a capability exists to indicate nested relationship support, but then you must support them in filtering and ordering as well as field selection. * Updates the metadata used in the default docker compose so that it: * uses an up to date pg schema * uses BooleanExpressionType instead of ObjectBooleanExpression * removes commands that do not exist on the pg connector * adds the Institutions model so that nested relationships can be tested This PR does not add support for nested relationships in filtering or in ordering. It also does not block nested relationships in field selection for NDC 0.2.x connectors that do not support it. This will all come in later PRs. ### How In `metadata_resolve`, the resolved `DataConnector` used to contain a copy of the `ndc_models::Capabilities`. This has been removed and instead a `metadata_resolve` specific `DataConnectorCapabilities` structure is used instead. This decouples `metadata_resolve` from `ndc_models` and allows it to capture differences between NDC 0.1.x and 0.2.x properly. There is now a specific function per NDC version that creates a `DataConnectorCapabilities`. This removes the need for capabilities migration code. V3_GIT_ORIGIN_REV_ID: 0eb119aab0e5fa22977d84820025f75c6102036d --- v3/ci.docker-compose.yaml | 2 + .../nested/selection/expected.json | 57 + .../nested/selection/metadata.json | 485 + .../nested/selection/request.gql | 14 + .../nested/selection/session_variables.json | 8 + v3/crates/engine/tests/relationship.rs | 11 + .../generate_ir/field_argument/expected.json | 10 +- .../tests/generate_ir/get_by_id/expected.json | 10 +- .../tests/generate_ir/get_many/expected.json | 10 +- .../get_many_model_count/expected.json | 130 +- .../generate_ir/get_many_user_2/expected.json | 10 +- .../generate_ir/get_many_where/expected.json | 20 +- .../metadata-resolve/src/ndc_migration/v02.rs | 108 - .../src/stages/aggregates/mod.rs | 2 +- .../src/stages/data_connectors/types.rs | 223 +- .../src/stages/models/aggregation.rs | 6 +- .../src/stages/object_relationships/mod.rs | 8 +- .../resolved.snap | 38 +- .../resolved.snap | 38 +- .../object/partial_supergraph/resolved.snap | 19 +- .../object/simple/resolved.snap | 38 +- .../resolved.snap | 19 +- .../relationship/resolved.snap | 38 +- .../root_field/resolved.snap | 19 +- .../nested_object/resolved.snap | 19 +- .../partial_supergraph/resolved.snap | 19 +- .../range/resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../resolved.snap | 19 +- .../model_v1_upgrade/resolved.snap | 19 +- .../model_v2_no_order_by/resolved.snap | 19 +- .../model_v2_with_order_by/resolved.snap | 19 +- .../order_by_expressions/nested/resolved.snap | 19 +- v3/docker-compose.yaml | 1 + v3/static/docker_schema.json | 11203 ++++++++++++++-- 44 files changed, 11755 insertions(+), 1114 deletions(-) create mode 100644 v3/crates/engine/tests/execute/relationships/nested/selection/expected.json create mode 100644 v3/crates/engine/tests/execute/relationships/nested/selection/metadata.json create mode 100644 v3/crates/engine/tests/execute/relationships/nested/selection/request.gql create mode 100644 v3/crates/engine/tests/execute/relationships/nested/selection/session_variables.json diff --git a/v3/ci.docker-compose.yaml b/v3/ci.docker-compose.yaml index 96738b75f5b..61beedb3431 100644 --- a/v3/ci.docker-compose.yaml +++ b/v3/ci.docker-compose.yaml @@ -1,3 +1,5 @@ +name: v3-engine-tests + services: postgres: extends: diff --git a/v3/crates/engine/tests/execute/relationships/nested/selection/expected.json b/v3/crates/engine/tests/execute/relationships/nested/selection/expected.json new file mode 100644 index 00000000000..b603e464715 --- /dev/null +++ b/v3/crates/engine/tests/execute/relationships/nested/selection/expected.json @@ -0,0 +1,57 @@ +[ + { + "data": { + "InstitutionMany": [ + { + "name": "Queen Mary University of London", + "staff": [ + { + "first_name": "Peter", + "last_name": "Landin", + "favourite_artist_id": 1, + "favourite_artist": { + "artist_id": 1, + "name": "AC/DC" + } + } + ] + }, + { + "name": "Chalmers University of Technology", + "staff": [ + { + "first_name": "John", + "last_name": "Hughes", + "favourite_artist_id": 2, + "favourite_artist": { + "artist_id": 2, + "name": "Accept" + } + }, + { + "first_name": "Koen", + "last_name": "Claessen", + "favourite_artist_id": 3, + "favourite_artist": { + "artist_id": 3, + "name": "Aerosmith" + } + } + ] + }, + { + "name": "University of Nowhere", + "staff": null + } + ] + } + }, + { + "data": null, + "errors": [ + { + "message": "validation failed: no such field on type Artist: name" + } + ] + } +] diff --git a/v3/crates/engine/tests/execute/relationships/nested/selection/metadata.json b/v3/crates/engine/tests/execute/relationships/nested/selection/metadata.json new file mode 100644 index 00000000000..99b57701307 --- /dev/null +++ b/v3/crates/engine/tests/execute/relationships/nested/selection/metadata.json @@ -0,0 +1,485 @@ +{ + "version": "v2", + "subgraphs": [ + { + "name": "default", + "objects": [ + { + "kind": "Model", + "version": "v1", + "definition": { + "name": "artist", + "objectType": "artist", + "source": { + "dataConnectorName": "db", + "collection": "Artist" + }, + "orderableFields": [ + { + "fieldName": "artist_id", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "name", + "orderByDirections": { + "enableAll": true + } + } + ], + "graphql": { + "selectUniques": [ + { + "queryRootField": "ArtistById", + "uniqueIdentifier": ["artist_id"] + } + ], + "selectMany": { + "queryRootField": "Artists" + } + } + } + }, + { + "kind": "ModelPermissions", + "version": "v1", + "definition": { + "modelName": "artist", + "permissions": [ + { + "role": "admin", + "select": { + "filter": null + } + }, + { + "role": "user1", + "select": { + "filter": null + } + } + ] + } + }, + { + "kind": "Model", + "version": "v1", + "definition": { + "name": "institutions", + "arguments": [], + "objectType": "institution", + "source": { + "dataConnectorName": "db", + "collection": "institution", + "argumentMapping": {} + }, + "graphql": { + "selectUniques": [], + "selectMany": { + "queryRootField": "InstitutionMany" + } + }, + "orderableFields": [ + { + "fieldName": "id", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "name", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "location", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "staff", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "departments", + "orderByDirections": { + "enableAll": true + } + } + ] + } + }, + { + "kind": "ModelPermissions", + "version": "v1", + "definition": { + "modelName": "institutions", + "permissions": [ + { + "role": "admin", + "select": { + "filter": null + } + }, + { + "role": "user1", + "select": { + "filter": null + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "artist", + "fields": [ + { + "name": "artist_id", + "type": "Int!" + }, + { + "name": "name", + "type": "String!" + } + ], + "graphql": { + "typeName": "Artist" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "Artist", + "fieldMapping": { + "artist_id": { + "column": { + "name": "ArtistId" + } + }, + "name": { + "column": { + "name": "Name" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "artist", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": ["artist_id", "name"] + } + }, + { + "role": "user1", + "output": { + "allowedFields": ["artist_id"] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "institution", + "fields": [ + { + "name": "id", + "type": "Int!" + }, + { + "name": "name", + "type": "String!" + }, + { + "name": "location", + "type": "location" + }, + { + "name": "staff", + "type": "[staff_member]" + }, + { + "name": "departments", + "type": "[String]" + } + ], + "graphql": { + "typeName": "Institution" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "institution", + "fieldMapping": { + "id": { + "column": { + "name": "id" + } + }, + "name": { + "column": { + "name": "name" + } + }, + "location": { + "column": { + "name": "location" + } + }, + "staff": { + "column": { + "name": "staff" + } + }, + "departments": { + "column": { + "name": "departments" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "institution", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": [ + "id", + "name", + "location", + "staff", + "departments" + ] + } + }, + { + "role": "user1", + "output": { + "allowedFields": [ + "id", + "name", + "location", + "staff", + "departments" + ] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "staff_member", + "fields": [ + { + "name": "first_name", + "type": "String" + }, + { + "name": "last_name", + "type": "String" + }, + { + "name": "specialities", + "type": "[String]" + }, + { + "name": "favourite_artist_id", + "type": "Int" + } + ], + "graphql": { + "typeName": "StaffMember" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "staff", + "fieldMapping": { + "first_name": { + "column": { + "name": "first_name" + } + }, + "last_name": { + "column": { + "name": "last_name" + } + }, + "specialities": { + "column": { + "name": "specialities" + } + }, + "favourite_artist_id": { + "column": { + "name": "favourite_artist_id" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "staff_member", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": [ + "first_name", + "last_name", + "specialities", + "favourite_artist_id" + ] + } + }, + { + "role": "user1", + "output": { + "allowedFields": [ + "first_name", + "last_name", + "specialities", + "favourite_artist_id" + ] + } + } + ] + } + }, + { + "kind": "Relationship", + "version": "v1", + "definition": { + "sourceType": "staff_member", + "name": "favourite_artist", + "target": { + "model": { + "name": "artist", + "relationshipType": "Object" + } + }, + "mapping": [ + { + "source": { + "fieldPath": [ + { + "fieldName": "favourite_artist_id" + } + ] + }, + "target": { + "modelField": [ + { + "fieldName": "artist_id" + } + ] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "location", + "fields": [ + { + "name": "city", + "type": "String" + }, + { + "name": "country", + "type": "String" + }, + { + "name": "campuses", + "type": "[String]" + } + ], + "graphql": { + "typeName": "Location" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "location", + "fieldMapping": { + "city": { + "column": { + "name": "city" + } + }, + "country": { + "column": { + "name": "country" + } + }, + "campuses": { + "column": { + "name": "campuses" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "location", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": ["city", "country", "campuses"] + } + }, + { + "role": "user1", + "output": { + "allowedFields": ["city", "country", "campuses"] + } + } + ] + } + } + ] + } + ] +} diff --git a/v3/crates/engine/tests/execute/relationships/nested/selection/request.gql b/v3/crates/engine/tests/execute/relationships/nested/selection/request.gql new file mode 100644 index 00000000000..bc5e148c7eb --- /dev/null +++ b/v3/crates/engine/tests/execute/relationships/nested/selection/request.gql @@ -0,0 +1,14 @@ +query MyQuery { + InstitutionMany { + name + staff { + first_name + last_name + favourite_artist_id + favourite_artist { + artist_id + name + } + } + } +} diff --git a/v3/crates/engine/tests/execute/relationships/nested/selection/session_variables.json b/v3/crates/engine/tests/execute/relationships/nested/selection/session_variables.json new file mode 100644 index 00000000000..71078597f8c --- /dev/null +++ b/v3/crates/engine/tests/execute/relationships/nested/selection/session_variables.json @@ -0,0 +1,8 @@ +[ + { + "x-hasura-role": "admin" + }, + { + "x-hasura-role": "user1" + } +] diff --git a/v3/crates/engine/tests/relationship.rs b/v3/crates/engine/tests/relationship.rs index 5bbd8792a79..ede13fc98db 100644 --- a/v3/crates/engine/tests/relationship.rs +++ b/v3/crates/engine/tests/relationship.rs @@ -467,6 +467,17 @@ fn test_relationships_permissions_source_type_permission() -> anyhow::Result<()> ) } +#[test] +fn test_relationships_nested_selection() -> anyhow::Result<()> { + let test_path_string = "execute/relationships/nested/selection"; + let common_metadata_path_string = "execute/common_metadata/postgres_connector_schema.json"; + common::test_execution_expectation( + test_path_string, + &[common_metadata_path_string], + common::TestOpenDDPipeline::Skip, + ) +} + // Miscellaneous tests // What is being tested? diff --git a/v3/crates/graphql/frontend/tests/generate_ir/field_argument/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/field_argument/expected.json index 03e9397b6a9..e96f36dd8bd 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/field_argument/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/field_argument/expected.json @@ -142,7 +142,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "Artist", diff --git a/v3/crates/graphql/frontend/tests/generate_ir/get_by_id/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/get_by_id/expected.json index a1171d4f87f..1d637d342f8 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/get_by_id/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/get_by_id/expected.json @@ -113,7 +113,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", diff --git a/v3/crates/graphql/frontend/tests/generate_ir/get_many/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/get_many/expected.json index d5608c08d00..873023bd56d 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/get_many/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/get_many/expected.json @@ -100,7 +100,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", diff --git a/v3/crates/graphql/frontend/tests/generate_ir/get_many_model_count/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/get_many_model_count/expected.json index f72bbf8333f..9013653a467 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/get_many_model_count/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/get_many_model_count/expected.json @@ -37,7 +37,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -206,7 +214,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "author", @@ -389,7 +405,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -665,7 +689,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "arguments": {}, @@ -688,7 +720,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -722,7 +762,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "author", @@ -756,7 +804,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -812,7 +868,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "source_type_mappings": { @@ -933,7 +997,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -1081,7 +1153,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "source_type_mappings": { @@ -1182,7 +1262,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "author", @@ -1338,7 +1426,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "source_type_mappings": { @@ -1439,7 +1535,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", diff --git a/v3/crates/graphql/frontend/tests/generate_ir/get_many_user_2/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/get_many_user_2/expected.json index d365eab9df8..fbe22265ea1 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/get_many_user_2/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/get_many_user_2/expected.json @@ -113,7 +113,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", diff --git a/v3/crates/graphql/frontend/tests/generate_ir/get_many_where/expected.json b/v3/crates/graphql/frontend/tests/generate_ir/get_many_where/expected.json index e1742d14177..0cdcfe457cf 100644 --- a/v3/crates/graphql/frontend/tests/generate_ir/get_many_where/expected.json +++ b/v3/crates/graphql/frontend/tests/generate_ir/get_many_where/expected.json @@ -100,7 +100,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "article", @@ -293,7 +301,15 @@ "capabilities": { "supported_ndc_version": "V01", "supports_explaining_queries": true, - "supports_nested_object_filtering": true + "supports_nested_object_filtering": true, + "supports_aggregates": {}, + "supports_query_variables": true, + "supports_relationships": { + "supports_relation_comparisons": true, + "supports_nested_relationships": { + "supports_nested_array_selection": true + } + } } }, "collection": "author", diff --git a/v3/crates/metadata-resolve/src/ndc_migration/v02.rs b/v3/crates/metadata-resolve/src/ndc_migration/v02.rs index bcf87bbb790..090e5a5b391 100644 --- a/v3/crates/metadata-resolve/src/ndc_migration/v02.rs +++ b/v3/crates/metadata-resolve/src/ndc_migration/v02.rs @@ -326,114 +326,6 @@ fn migrate_procedure_info_from_v01( } } -pub fn migrate_capabilities_from_v01( - old_capabilities: ndc_models_v01::Capabilities, -) -> ndc_models_v02::Capabilities { - ndc_models_v02::Capabilities { - query: migrate_query_capabilities_from_v01(old_capabilities.query), - mutation: migrate_mutation_capabilities_from_v01(old_capabilities.mutation), - relationships: old_capabilities - .relationships - .map(migrate_relationship_capabilities_from_v01), - } -} - -fn migrate_query_capabilities_from_v01( - old_query_capabilities: ndc_models_v01::QueryCapabilities, -) -> ndc_models_v02::QueryCapabilities { - ndc_models_v02::QueryCapabilities { - aggregates: old_query_capabilities - .aggregates - .map(migrate_aggregate_capabilities_from_v01), - variables: old_query_capabilities - .variables - .map(migrate_leaf_capability_from_v01), - explain: old_query_capabilities - .explain - .map(migrate_leaf_capability_from_v01), - nested_fields: migrate_nested_field_capabilities_from_v01( - old_query_capabilities.nested_fields, - ), - exists: migrate_exists_capabilities_from_v01(old_query_capabilities.exists), - } -} - -#[allow(clippy::needless_pass_by_value)] // We want the value to be consumed and discarded here -fn migrate_aggregate_capabilities_from_v01( - _old_leaf_capability: ndc_models_v01::LeafCapability, -) -> ndc_models_v02::AggregateCapabilities { - ndc_models_v02::AggregateCapabilities { - filter_by: None, // v0.1.x does not support filtering by aggregate predicates - group_by: None, // v0.1.x does not support group by - } -} - -#[allow(clippy::needless_pass_by_value)] // We want the value to be consumed and discarded here -fn migrate_leaf_capability_from_v01( - _old_leaf_capability: ndc_models_v01::LeafCapability, -) -> ndc_models_v02::LeafCapability { - ndc_models_v02::LeafCapability {} -} - -fn migrate_exists_capabilities_from_v01( - old_exists_capabilities: ndc_models_v01::ExistsCapabilities, -) -> ndc_models_v02::ExistsCapabilities { - ndc_models_v02::ExistsCapabilities { - named_scopes: None, // v0.1.x does not have named scopes - unrelated: Some(ndc_models_v02::LeafCapability {}), // v0.1.x assumed this capability - nested_collections: old_exists_capabilities - .nested_collections - .map(migrate_leaf_capability_from_v01), - nested_scalar_collections: None, - } -} - -fn migrate_nested_field_capabilities_from_v01( - old_nested_field_capabilities: ndc_models_v01::NestedFieldCapabilities, -) -> ndc_models_v02::NestedFieldCapabilities { - ndc_models_v02::NestedFieldCapabilities { - filter_by: old_nested_field_capabilities.filter_by.map(|_leaf| { - ndc_models_v02::NestedFieldFilterByCapabilities { - nested_arrays: None, - } - }), - order_by: old_nested_field_capabilities - .order_by - .map(migrate_leaf_capability_from_v01), - aggregates: old_nested_field_capabilities - .aggregates - .map(migrate_leaf_capability_from_v01), - nested_collections: None, // v0.1.x does not support nested field collections - } -} - -fn migrate_mutation_capabilities_from_v01( - old_mutation_capabilities: ndc_models_v01::MutationCapabilities, -) -> ndc_models_v02::MutationCapabilities { - ndc_models_v02::MutationCapabilities { - transactional: old_mutation_capabilities - .transactional - .map(migrate_leaf_capability_from_v01), - explain: old_mutation_capabilities - .explain - .map(migrate_leaf_capability_from_v01), - } -} - -fn migrate_relationship_capabilities_from_v01( - old_relationship_capabilities: ndc_models_v01::RelationshipCapabilities, -) -> ndc_models_v02::RelationshipCapabilities { - ndc_models_v02::RelationshipCapabilities { - relation_comparisons: old_relationship_capabilities - .relation_comparisons - .map(migrate_leaf_capability_from_v01), - order_by_aggregate: old_relationship_capabilities - .order_by_aggregate - .map(migrate_leaf_capability_from_v01), - nested: None, - } -} - fn migrate_scalar_type_name_from_v01( old_name: ndc_models_v01::ScalarTypeName, ) -> ndc_models_v02::ScalarTypeName { diff --git a/v3/crates/metadata-resolve/src/stages/aggregates/mod.rs b/v3/crates/metadata-resolve/src/stages/aggregates/mod.rs index dde81b0d2c6..7aa3cd269cc 100644 --- a/v3/crates/metadata-resolve/src/stages/aggregates/mod.rs +++ b/v3/crates/metadata-resolve/src/stages/aggregates/mod.rs @@ -400,7 +400,7 @@ fn resolve_aggregation_function( name: aggregate_expression_name.clone(), data_connector_name: data_connector_name.clone(), })?; - if data_connector.capabilities.query.aggregates.is_none() { + if data_connector.capabilities.supports_aggregates.is_none() { return Err(AggregateExpressionError::AggregateOperandDataConnectorNotSupported { name: aggregate_expression_name.clone(), data_connector_name: data_connector_name.clone(), diff --git a/v3/crates/metadata-resolve/src/stages/data_connectors/types.rs b/v3/crates/metadata-resolve/src/stages/data_connectors/types.rs index f865077c719..60a7b2b6af5 100644 --- a/v3/crates/metadata-resolve/src/stages/data_connectors/types.rs +++ b/v3/crates/metadata-resolve/src/stages/data_connectors/types.rs @@ -56,8 +56,7 @@ pub struct DataConnectorContext<'a> { pub url: &'a data_connector::DataConnectorUrl, pub headers: IndexMap, pub schema: DataConnectorSchema, - pub capabilities: ndc_models::Capabilities, - pub supported_ndc_version: NdcVersion, + pub capabilities: DataConnectorCapabilities, pub argument_presets: Vec, pub response_headers: Option, } @@ -68,9 +67,7 @@ impl<'a> DataConnectorContext<'a> { data_connector: &'a data_connector::DataConnectorLinkV1, unstable_features: &UnstableFeatures, ) -> Result<(Self, Vec), DataConnectorError> { - let (resolved_schema, capabilities, supported_ndc_version, issues) = match &data_connector - .schema - { + let (resolved_schema, capabilities, issues) = match &data_connector.schema { VersionedSchemaAndCapabilities::V01(schema_and_capabilities) => { let issues = validate_ndc_version( NdcVersion::V01, @@ -80,10 +77,9 @@ impl<'a> DataConnectorContext<'a> { DataConnectorSchema::new(ndc_migration::v02::migrate_schema_response_from_v01( schema_and_capabilities.schema.clone(), )); - let capabilities = ndc_migration::v02::migrate_capabilities_from_v01( - schema_and_capabilities.capabilities.capabilities.clone(), - ); - (schema, capabilities, NdcVersion::V01, issues) + let capabilities = + mk_ndc_01_capabilities(&schema_and_capabilities.capabilities.capabilities); + (schema, capabilities, issues) } VersionedSchemaAndCapabilities::V02(schema_and_capabilities) => { let issues = validate_ndc_version( @@ -91,12 +87,15 @@ impl<'a> DataConnectorContext<'a> { &schema_and_capabilities.capabilities.version, )?; let schema = DataConnectorSchema::new(schema_and_capabilities.schema.clone()); - let capabilities = schema_and_capabilities.capabilities.capabilities.clone(); - (schema, capabilities, NdcVersion::V02, issues) + let capabilities = + mk_ndc_02_capabilities(&schema_and_capabilities.capabilities.capabilities); + (schema, capabilities, issues) } }; - if !unstable_features.enable_ndc_v02_support && supported_ndc_version == NdcVersion::V02 { + if !unstable_features.enable_ndc_v02_support + && capabilities.supported_ndc_version == NdcVersion::V02 + { return Err(DataConnectorError::NdcV02DataConnectorNotSupported); } @@ -134,7 +133,6 @@ impl<'a> DataConnectorContext<'a> { .collect(), schema: resolved_schema, capabilities, - supported_ndc_version, argument_presets, response_headers, }; @@ -296,34 +294,11 @@ impl DataConnectorLink { data_connector_name: name.clone(), error: to_error(e), })?; - let capabilities = DataConnectorCapabilities { - supported_ndc_version: context.supported_ndc_version, - supports_explaining_queries: context.capabilities.query.explain.is_some(), - supports_explaining_mutations: context.capabilities.mutation.explain.is_some(), - supports_nested_object_filtering: context - .capabilities - .query - .nested_fields - .filter_by - .is_some(), - supports_nested_array_filtering: context - .capabilities - .query - .exists - .nested_collections - .is_some(), - supports_nested_object_aggregations: context - .capabilities - .query - .nested_fields - .aggregates - .is_some(), - }; Ok(Self { name, url, headers, - capabilities, + capabilities: context.capabilities.clone(), response_config: context.response_headers.clone().map(Arc::new), }) } @@ -463,30 +438,158 @@ impl CommandsResponseConfig { #[allow(clippy::struct_excessive_bools)] pub struct DataConnectorCapabilities { pub supported_ndc_version: NdcVersion, + + /// Whether not explaining queries is supported + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] pub supports_explaining_queries: bool, + + /// Whether not explaining mutations is supported #[serde(default = "serde_ext::ser_default")] #[serde(skip_serializing_if = "serde_ext::is_ser_default")] pub supports_explaining_mutations: bool, + + /// Whether not filtering by nested object fields is supported #[serde(default = "serde_ext::ser_default")] #[serde(skip_serializing_if = "serde_ext::is_ser_default")] pub supports_nested_object_filtering: bool, - #[serde(default = "serde_ext::ser_default")] - #[serde(skip_serializing_if = "serde_ext::is_ser_default")] - pub supports_nested_object_aggregations: bool, + + /// Whether not filtering using 'exists' over nested object arrays is supported #[serde(default = "serde_ext::ser_default")] #[serde(skip_serializing_if = "serde_ext::is_ser_default")] pub supports_nested_array_filtering: bool, + + /// Whether or not aggregates are supported + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_aggregates: Option, + + /// Whether or not query variables are supported + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_query_variables: bool, + + /// Whether or not relationships are supported + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_relationships: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] +pub struct DataConnectorAggregateCapabilities { + /// Whether not aggregating over nested object fields is supported + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_nested_object_aggregations: bool, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] +pub struct DataConnectorRelationshipCapabilities { + /// Whether or not filters can compare a column against another column that is across a relationship + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_relation_comparisons: bool, + + /// Whether or not relationships can start from or end with columns in nested objects. Implies support in field selection. + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_nested_relationships: Option, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] +pub struct DataConnectorNestedRelationshipCapabilities { + /// Whether or not relationships can start from columns inside nested objects inside nested arrays + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_nested_array_selection: bool, + + /// Whether or not nested relationships can be used in filtering + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_nested_in_filtering: bool, + + /// Whether or not nested relationships can be used in ordering + #[serde(default = "serde_ext::ser_default")] + #[serde(skip_serializing_if = "serde_ext::is_ser_default")] + pub supports_nested_in_ordering: bool, +} + +fn mk_ndc_01_capabilities( + capabilities: &ndc_models_v01::Capabilities, +) -> DataConnectorCapabilities { + DataConnectorCapabilities { + supported_ndc_version: NdcVersion::V01, + supports_explaining_queries: capabilities.query.explain.is_some(), + supports_explaining_mutations: capabilities.mutation.explain.is_some(), + supports_nested_object_filtering: capabilities.query.nested_fields.filter_by.is_some(), + supports_nested_array_filtering: capabilities.query.exists.nested_collections.is_some(), + supports_aggregates: capabilities.query.aggregates.as_ref().map(|_agg| { + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: capabilities + .query + .nested_fields + .aggregates + .is_some(), + } + }), + supports_query_variables: capabilities.query.variables.is_some(), + supports_relationships: capabilities.relationships.as_ref().map(|rel| { + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: rel.relation_comparisons.is_some(), + // Selection of nested relationships is assumed supported in NDC 0.1.x + supports_nested_relationships: Some(DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + // Selection of nested filtering/ordering is not supported in NDC 0.1.x + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }), + } + }), + } +} + +fn mk_ndc_02_capabilities(capabilities: &ndc_models::Capabilities) -> DataConnectorCapabilities { + DataConnectorCapabilities { + supported_ndc_version: NdcVersion::V02, + supports_explaining_queries: capabilities.query.explain.is_some(), + supports_explaining_mutations: capabilities.mutation.explain.is_some(), + supports_nested_object_filtering: capabilities.query.nested_fields.filter_by.is_some(), + supports_nested_array_filtering: capabilities.query.exists.nested_collections.is_some(), + supports_aggregates: capabilities.query.aggregates.as_ref().map(|_agg| { + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: capabilities + .query + .nested_fields + .aggregates + .is_some(), + } + }), + supports_query_variables: capabilities.query.variables.is_some(), + supports_relationships: capabilities.relationships.as_ref().map(|rel| { + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: rel.relation_comparisons.is_some(), + supports_nested_relationships: rel.nested.as_ref().map(|n| { + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: n.array.is_some(), + supports_nested_in_filtering: true, + supports_nested_in_ordering: true, + } + }), + } + }), + } } #[cfg(test)] mod tests { - use ndc_models; use open_dds::{accessor::MetadataAccessor, data_connector::DataConnectorLinkV1, Metadata}; use strum::IntoEnumIterator; use crate::{ configuration::UnstableFeatures, - data_connectors::{error::DataConnectorIssue, types::NdcVersion}, + data_connectors::{ + error::DataConnectorIssue, types::NdcVersion, DataConnectorCapabilities, + }, stages::data_connectors::types::DataConnectorContext, }; @@ -530,11 +633,16 @@ mod tests { ), jsonpath::JSONPath::new()) .unwrap(); - let explicit_capabilities: ndc_models::Capabilities = - serde_json::from_value(serde_json::json!( - { "query": { "nested_fields": {}, "exists": { "unrelated": {} } }, "mutation": {} } - )) - .unwrap(); + let data_connector_capabilities = DataConnectorCapabilities { + supported_ndc_version: NdcVersion::V01, + supports_explaining_queries: false, + supports_explaining_mutations: false, + supports_nested_object_filtering: false, + supports_nested_array_filtering: false, + supports_aggregates: None, + supports_query_variables: false, + supports_relationships: None, + }; // With explicit capabilities specified, we should use them let unstable_features = UnstableFeatures { @@ -548,8 +656,7 @@ mod tests { &unstable_features, ) .unwrap(); - assert_eq!(context.capabilities, explicit_capabilities); - assert_eq!(context.supported_ndc_version, NdcVersion::V01); + assert_eq!(context.capabilities, data_connector_capabilities); assert_eq!(issues.len(), 0, "Issues: {issues:#?}"); } @@ -575,11 +682,16 @@ mod tests { ), jsonpath::JSONPath::new()) .unwrap(); - let explicit_capabilities: ndc_models::Capabilities = - serde_json::from_value(serde_json::json!( - { "query": { "nested_fields": {}, "exists": {} }, "mutation": {} } - )) - .unwrap(); + let data_connector_capabilities = DataConnectorCapabilities { + supported_ndc_version: NdcVersion::V02, + supports_explaining_queries: false, + supports_explaining_mutations: false, + supports_nested_object_filtering: false, + supports_nested_array_filtering: false, + supports_aggregates: None, + supports_query_variables: false, + supports_relationships: None, + }; // With explicit capabilities specified, we should use them let unstable_features = UnstableFeatures { @@ -593,8 +705,7 @@ mod tests { &unstable_features, ) .unwrap(); - assert_eq!(context.capabilities, explicit_capabilities); - assert_eq!(context.supported_ndc_version, NdcVersion::V02); + assert_eq!(context.capabilities, data_connector_capabilities); assert_eq!(issues.len(), 0, "Issues: {issues:#?}"); } diff --git a/v3/crates/metadata-resolve/src/stages/models/aggregation.rs b/v3/crates/metadata-resolve/src/stages/models/aggregation.rs index c0c2f7e5d9b..0b5670e639c 100644 --- a/v3/crates/metadata-resolve/src/stages/models/aggregation.rs +++ b/v3/crates/metadata-resolve/src/stages/models/aggregation.rs @@ -179,7 +179,11 @@ fn resolve_aggregate_expression_data_connector_mapping( // If our field contains a nested object type if let Some(field_object_type_name) = field_object_type_name { // Check that the data connector supports aggregation over nested object fields - if !data_connector_capabilities.supports_nested_object_aggregations { + if !data_connector_capabilities + .supports_aggregates + .as_ref() + .is_some_and(|agg| agg.supports_nested_object_aggregations) + { return Err(aggregates::AggregateExpressionError::NestedObjectAggregatesNotSupportedByDataConnector { name: aggregate_expression.name.clone(), data_connector_name: data_connector_name.clone(), diff --git a/v3/crates/metadata-resolve/src/stages/object_relationships/mod.rs b/v3/crates/metadata-resolve/src/stages/object_relationships/mod.rs index 207c2e69ad5..ef9bc19f663 100644 --- a/v3/crates/metadata-resolve/src/stages/object_relationships/mod.rs +++ b/v3/crates/metadata-resolve/src/stages/object_relationships/mod.rs @@ -420,7 +420,7 @@ fn get_relationship_capabilities( let capabilities = &resolved_data_connector.capabilities; // if relationship is remote, error if `foreach` capability is not available - if capabilities.query.variables.is_none() + if capabilities.supports_query_variables && Some(&data_connector.name) != target_data_connector.as_ref() { return Err(Error::ObjectRelationshipError { @@ -432,11 +432,11 @@ fn get_relationship_capabilities( }); }; - let relationships = capabilities.relationships.is_some(); + let relationships = capabilities.supports_relationships.is_some(); let relationship_comparison = capabilities - .relationships + .supports_relationships .as_ref() - .is_some_and(|r| r.relation_comparisons.is_some()); + .is_some_and(|r| r.supports_relation_comparisons); Ok(Some(RelationshipCapabilities { foreach: (), diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_aggregate_warning/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_aggregate_warning/resolved.snap index 2d90227f9e5..f95558d9055 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_aggregate_warning/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_aggregate_warning/resolved.snap @@ -560,8 +560,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( @@ -839,8 +856,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_logical_operators_warning/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_logical_operators_warning/resolved.snap index a18bc1057c3..dd95679382f 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_logical_operators_warning/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/missing_graphqlconfig_logical_operators_warning/resolved.snap @@ -560,8 +560,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( @@ -839,8 +856,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/partial_supergraph/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/partial_supergraph/resolved.snap index 8b465da4c36..98aec16790d 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/partial_supergraph/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/partial_supergraph/resolved.snap @@ -351,8 +351,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/simple/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/simple/resolved.snap index f67ce984d1c..3f70690cf5a 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/simple/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/object/simple/resolved.snap @@ -560,8 +560,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( @@ -839,8 +856,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_boolean_expressions/ supports_explaining_queries: false, supports_explaining_mutations: false, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: false, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: false, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/missing_filter_input_field_name_in_graphql_config/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/missing_filter_input_field_name_in_graphql_config/resolved.snap index 5719950cf2e..51e07576cd2 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/missing_filter_input_field_name_in_graphql_config/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/missing_filter_input_field_name_in_graphql_config/resolved.snap @@ -1315,8 +1315,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/missing_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/relationship/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/relationship/resolved.snap index 8e7a6db10b1..dc2f29d9e3b 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/relationship/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/relationship/resolved.snap @@ -1930,8 +1930,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( @@ -2997,8 +3014,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/relation supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/root_field/resolved.snap b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/root_field/resolved.snap index d924315b76c..6226a192ba2 100644 --- a/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/root_field/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/aggregate_expressions/root_field/resolved.snap @@ -1315,8 +1315,25 @@ input_file: crates/metadata-resolve/tests/passing/aggregate_expressions/root_fie supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/nested_object/resolved.snap b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/nested_object/resolved.snap index 2e48b6e3065..f764f39ba33 100644 --- a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/nested_object/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/nested_object/resolved.snap @@ -1002,8 +1002,25 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/nested supports_explaining_queries: true, supports_explaining_mutations: false, supports_nested_object_filtering: true, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/partial_supergraph/resolved.snap b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/partial_supergraph/resolved.snap index 19158bdd8a4..0e03f727b92 100644 --- a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/partial_supergraph/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/partial_supergraph/resolved.snap @@ -501,8 +501,25 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/partia supports_explaining_queries: true, supports_explaining_mutations: false, supports_nested_object_filtering: true, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/range/resolved.snap b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/range/resolved.snap index da0e6748daa..64b013cec81 100644 --- a/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/range/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/boolean_expression_type/range/resolved.snap @@ -578,8 +578,25 @@ input_file: crates/metadata-resolve/tests/passing/boolean_expression_type/range/ supports_explaining_queries: true, supports_explaining_mutations: false, supports_nested_object_filtering: true, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/command_permissions/nullable_predicate_args_can_be_preset/resolved.snap b/v3/crates/metadata-resolve/tests/passing/command_permissions/nullable_predicate_args_can_be_preset/resolved.snap index a91269ec854..c877b1fa9a9 100644 --- a/v3/crates/metadata-resolve/tests/passing/command_permissions/nullable_predicate_args_can_be_preset/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/command_permissions/nullable_predicate_args_can_be_preset/resolved.snap @@ -372,8 +372,25 @@ input_file: crates/metadata-resolve/tests/passing/command_permissions/nullable_p supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Function( diff --git a/v3/crates/metadata-resolve/tests/passing/command_permissions/predicate_args_can_be_preset /resolved.snap b/v3/crates/metadata-resolve/tests/passing/command_permissions/predicate_args_can_be_preset /resolved.snap index 1e7f7cbfaa7..6b6be3f7f6f 100644 --- a/v3/crates/metadata-resolve/tests/passing/command_permissions/predicate_args_can_be_preset /resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/command_permissions/predicate_args_can_be_preset /resolved.snap @@ -372,8 +372,25 @@ input_file: crates/metadata-resolve/tests/passing/command_permissions/predicate_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Function( diff --git a/v3/crates/metadata-resolve/tests/passing/commands/functions/all_args_are_set_including_connector_link_presets/resolved.snap b/v3/crates/metadata-resolve/tests/passing/commands/functions/all_args_are_set_including_connector_link_presets/resolved.snap index b93e2570ea8..a3ed8ae4a21 100644 --- a/v3/crates/metadata-resolve/tests/passing/commands/functions/all_args_are_set_including_connector_link_presets/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/commands/functions/all_args_are_set_including_connector_link_presets/resolved.snap @@ -171,8 +171,25 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/all_args_ar supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Function( diff --git a/v3/crates/metadata-resolve/tests/passing/commands/functions/issue_when_not_all_arguments_defined/resolved.snap b/v3/crates/metadata-resolve/tests/passing/commands/functions/issue_when_not_all_arguments_defined/resolved.snap index 960127abbd5..7ca98ac1394 100644 --- a/v3/crates/metadata-resolve/tests/passing/commands/functions/issue_when_not_all_arguments_defined/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/commands/functions/issue_when_not_all_arguments_defined/resolved.snap @@ -171,8 +171,25 @@ input_file: crates/metadata-resolve/tests/passing/commands/functions/issue_when_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Function( diff --git a/v3/crates/metadata-resolve/tests/passing/commands/procedures/all_args_are_set_including_connector_link_presets/resolved.snap b/v3/crates/metadata-resolve/tests/passing/commands/procedures/all_args_are_set_including_connector_link_presets/resolved.snap index d72c8ec009a..3c7f24416fa 100644 --- a/v3/crates/metadata-resolve/tests/passing/commands/procedures/all_args_are_set_including_connector_link_presets/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/commands/procedures/all_args_are_set_including_connector_link_presets/resolved.snap @@ -171,8 +171,25 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/all_args_a supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Procedure( diff --git a/v3/crates/metadata-resolve/tests/passing/commands/procedures/issue_when_not_all_arguments_defined/resolved.snap b/v3/crates/metadata-resolve/tests/passing/commands/procedures/issue_when_not_all_arguments_defined/resolved.snap index da9315ed4c2..475e0c21399 100644 --- a/v3/crates/metadata-resolve/tests/passing/commands/procedures/issue_when_not_all_arguments_defined/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/commands/procedures/issue_when_not_all_arguments_defined/resolved.snap @@ -171,8 +171,25 @@ input_file: crates/metadata-resolve/tests/passing/commands/procedures/issue_when supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, source: Procedure( diff --git a/v3/crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring_unknown_subgraphs/resolved.snap b/v3/crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring_unknown_subgraphs/resolved.snap index dce8c5ad999..15b8d570f1a 100644 --- a/v3/crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring_unknown_subgraphs/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring_unknown_subgraphs/resolved.snap @@ -501,8 +501,25 @@ input_file: crates/metadata-resolve/tests/passing/missing_subgraph_when_ignoring supports_explaining_queries: true, supports_explaining_mutations: false, supports_nested_object_filtering: true, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/model_permissions/nullable_predicate_args_can_be_preset/resolved.snap b/v3/crates/metadata-resolve/tests/passing/model_permissions/nullable_predicate_args_can_be_preset/resolved.snap index db35f75e750..3b6a7b0cea2 100644 --- a/v3/crates/metadata-resolve/tests/passing/model_permissions/nullable_predicate_args_can_be_preset/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/model_permissions/nullable_predicate_args_can_be_preset/resolved.snap @@ -420,8 +420,25 @@ input_file: crates/metadata-resolve/tests/passing/model_permissions/nullable_pre supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/model_permissions/predicate_args_can_be_preset/resolved.snap b/v3/crates/metadata-resolve/tests/passing/model_permissions/predicate_args_can_be_preset/resolved.snap index 223f9d9644d..93b97c5c656 100644 --- a/v3/crates/metadata-resolve/tests/passing/model_permissions/predicate_args_can_be_preset/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/model_permissions/predicate_args_can_be_preset/resolved.snap @@ -420,8 +420,25 @@ input_file: crates/metadata-resolve/tests/passing/model_permissions/predicate_ar supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/models/all_args_are_set_including_connector_link_presets/resolved.snap b/v3/crates/metadata-resolve/tests/passing/models/all_args_are_set_including_connector_link_presets/resolved.snap index 44e1a4a77c6..5e24784f893 100644 --- a/v3/crates/metadata-resolve/tests/passing/models/all_args_are_set_including_connector_link_presets/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/models/all_args_are_set_including_connector_link_presets/resolved.snap @@ -297,8 +297,25 @@ input_file: crates/metadata-resolve/tests/passing/models/all_args_are_set_includ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/models/issue_when_not_all_arguments_defined/resolved.snap b/v3/crates/metadata-resolve/tests/passing/models/issue_when_not_all_arguments_defined/resolved.snap index 8a92d792f9b..6901c4952f6 100644 --- a/v3/crates/metadata-resolve/tests/passing/models/issue_when_not_all_arguments_defined/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/models/issue_when_not_all_arguments_defined/resolved.snap @@ -297,8 +297,25 @@ input_file: crates/metadata-resolve/tests/passing/models/issue_when_not_all_argu supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v1_upgrade/resolved.snap b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v1_upgrade/resolved.snap index 4eccd5762ba..fe0fc2b4591 100644 --- a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v1_upgrade/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v1_upgrade/resolved.snap @@ -230,8 +230,25 @@ input_file: crates/metadata-resolve/tests/passing/order_by_expressions/model_v1_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_no_order_by/resolved.snap b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_no_order_by/resolved.snap index 7a161ab3044..ce9953de8ca 100644 --- a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_no_order_by/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_no_order_by/resolved.snap @@ -230,8 +230,25 @@ input_file: crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_with_order_by/resolved.snap b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_with_order_by/resolved.snap index acedaeb723e..ca31edec67c 100644 --- a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_with_order_by/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_with_order_by/resolved.snap @@ -230,8 +230,25 @@ input_file: crates/metadata-resolve/tests/passing/order_by_expressions/model_v2_ supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/nested/resolved.snap b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/nested/resolved.snap index b1464a9c6be..04102a508eb 100644 --- a/v3/crates/metadata-resolve/tests/passing/order_by_expressions/nested/resolved.snap +++ b/v3/crates/metadata-resolve/tests/passing/order_by_expressions/nested/resolved.snap @@ -329,8 +329,25 @@ input_file: crates/metadata-resolve/tests/passing/order_by_expressions/nested/me supports_explaining_queries: true, supports_explaining_mutations: true, supports_nested_object_filtering: false, - supports_nested_object_aggregations: false, supports_nested_array_filtering: false, + supports_aggregates: Some( + DataConnectorAggregateCapabilities { + supports_nested_object_aggregations: false, + }, + ), + supports_query_variables: true, + supports_relationships: Some( + DataConnectorRelationshipCapabilities { + supports_relation_comparisons: true, + supports_nested_relationships: Some( + DataConnectorNestedRelationshipCapabilities { + supports_nested_array_selection: true, + supports_nested_in_filtering: false, + supports_nested_in_ordering: false, + }, + ), + }, + ), }, }, collection: CollectionName( diff --git a/v3/docker-compose.yaml b/v3/docker-compose.yaml index 5686dde2afd..f29557fae0f 100644 --- a/v3/docker-compose.yaml +++ b/v3/docker-compose.yaml @@ -95,6 +95,7 @@ services: ports: - 8080:8080 environment: + HASURA_SERVICE_TOKEN_SECRET: super sekret CONNECTION_URI: "postgresql://postgres:password@postgres" OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: "http://jaeger:4317" OTEL_SERVICE_NAME: "ndc-postgres" diff --git a/v3/static/docker_schema.json b/v3/static/docker_schema.json index 4106c40fc81..0fb3092dbc1 100644 --- a/v3/static/docker_schema.json +++ b/v3/static/docker_schema.json @@ -1,55 +1,6 @@ { - "version": "v2", - "supergraph": { - "objects": [ - { - "kind": "GraphqlConfig", - "version": "v1", - "definition": { - "query": { - "rootOperationTypeName": "Query", - "argumentsInput": { - "fieldName": "args" - }, - "limitInput": { - "fieldName": "limit" - }, - "offsetInput": { - "fieldName": "offset" - }, - "filterInput": { - "fieldName": "where", - "operatorNames": { - "and": "_and", - "or": "_or", - "not": "_not", - "isNull": "_is_null" - } - }, - "orderByInput": { - "fieldName": "order_by", - "enumDirectionValues": { - "asc": "Asc", - "desc": "Desc" - }, - "enumTypeNames": [ - { - "directions": ["Asc", "Desc"], - "typeName": "OrderByAscDesc" - } - ] - } - }, - "mutation": { - "rootOperationTypeName": "Mutation" - }, - "apolloFederation": { - "enableRootFields": true - } - } - } - ] - }, + "$schema": "../crates/open-dds/metadata.jsonschema", + "version": "v3", "subgraphs": [ { "name": "default", @@ -63,6 +14,9 @@ } }, "headers": { + "Authorization": { + "value": "Bearer super sekret" + }, "hasura-m-auth-token": { "value": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~!#$&'()*+,/:;=?@[]\"" } @@ -72,23 +26,35 @@ "schema": { "scalar_types": { "bool": { + "representation": { + "type": "boolean" + }, "aggregate_functions": { "bool_and": { "result_type": { - "type": "named", - "name": "bool" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } } }, "bool_or": { "result_type": { - "type": "named", - "name": "bool" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } } }, "every": { "result_type": { - "type": "named", - "name": "bool" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } } } }, @@ -97,102 +63,512 @@ "type": "equal" }, "_gt": { + "type": "custom", "argument_type": { "type": "named", "name": "bool" - }, - "type": "custom" + } }, "_gte": { + "type": "custom", "argument_type": { "type": "named", "name": "bool" - }, - "type": "custom" + } + }, + "_in": { + "type": "in" }, "_lt": { + "type": "custom", "argument_type": { "type": "named", "name": "bool" - }, - "type": "custom" + } }, "_lte": { + "type": "custom", "argument_type": { "type": "named", "name": "bool" - }, - "type": "custom" + } }, "_neq": { + "type": "custom", "argument_type": { "type": "named", "name": "bool" - }, - "type": "custom" + } + } + } + }, + "char": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_ilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_in": { + "type": "in" + }, + "_iregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_like": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_nilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_niregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_nlike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_nregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "_regex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "st_coveredby": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "st_covers": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "st_intersects": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "st_relatematch": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "starts_with": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + }, + "ts_match_tt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "char" + } + } + } + }, + "date": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "date" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "date" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "date" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "date" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "date" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "date" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "date" + } + } + } + }, + "float4": { + "representation": { + "type": "json" + }, + "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float4" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float4" + } + } + }, + "stddev": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "stddev_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "stddev_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float4" + } + } + }, + "var_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "var_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "variance": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "float4" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "float4" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "float4" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "float4" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "float4" + } } } }, "float8": { + "representation": { + "type": "json" + }, "aggregate_functions": { "avg": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "max": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "min": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "stddev": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "stddev_pop": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "stddev_samp": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "sum": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "var_pop": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "var_samp": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } }, "variance": { "result_type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } } } }, @@ -201,218 +577,165 @@ "type": "equal" }, "_gt": { + "type": "custom", "argument_type": { "type": "named", "name": "float8" - }, - "type": "custom" + } }, "_gte": { + "type": "custom", "argument_type": { "type": "named", "name": "float8" - }, - "type": "custom" + } + }, + "_in": { + "type": "in" }, "_lt": { + "type": "custom", "argument_type": { "type": "named", "name": "float8" - }, - "type": "custom" + } }, "_lte": { + "type": "custom", "argument_type": { "type": "named", "name": "float8" - }, - "type": "custom" + } }, "_neq": { + "type": "custom", "argument_type": { "type": "named", "name": "float8" - }, - "type": "custom" + } } } }, - "int4": { + "int2": { + "representation": { + "type": "json" + }, "aggregate_functions": { "avg": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "bit_and": { "result_type": { - "type": "named", - "name": "int4" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } } }, "bit_or": { "result_type": { - "type": "named", - "name": "int4" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } } }, "bit_xor": { "result_type": { - "type": "named", - "name": "int4" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } } }, "max": { "result_type": { - "type": "named", - "name": "int4" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } } }, "min": { "result_type": { - "type": "named", - "name": "int4" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } } }, "stddev": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "stddev_pop": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "stddev_samp": { "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "variance": { - "result_type": { - "type": "named", - "name": "numeric" - } - } - }, - "comparison_operators": { - "_eq": { - "type": "equal" - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "int4" - }, - "type": "custom" - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "int4" - }, - "type": "custom" - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "int4" - }, - "type": "custom" - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "int4" - }, - "type": "custom" - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "int4" - }, - "type": "custom" - } - } - }, - "numeric": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_samp": { - "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "sum": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } } }, "var_pop": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "var_samp": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } }, "variance": { "result_type": { - "type": "named", - "name": "numeric" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } } }, @@ -421,54 +744,165 @@ "type": "equal" }, "_gt": { + "type": "custom", "argument_type": { "type": "named", - "name": "numeric" - }, - "type": "custom" + "name": "int2" + } }, "_gte": { + "type": "custom", "argument_type": { "type": "named", - "name": "numeric" - }, - "type": "custom" + "name": "int2" + } + }, + "_in": { + "type": "in" }, "_lt": { + "type": "custom", "argument_type": { "type": "named", - "name": "numeric" - }, - "type": "custom" + "name": "int2" + } }, "_lte": { + "type": "custom", "argument_type": { "type": "named", - "name": "numeric" - }, - "type": "custom" + "name": "int2" + } }, "_neq": { + "type": "custom", "argument_type": { "type": "named", - "name": "numeric" - }, - "type": "custom" + "name": "int2" + } } } }, - "timestamp": { + "int4": { + "representation": { + "type": "json" + }, "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "bit_and": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "bit_or": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "bit_xor": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, "max": { "result_type": { - "type": "named", - "name": "timestamp" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } } }, "min": { "result_type": { - "type": "named", - "name": "timestamp" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "stddev": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "var_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "var_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "variance": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } } } }, @@ -477,306 +911,1108 @@ "type": "equal" }, "_gt": { + "type": "custom", "argument_type": { "type": "named", - "name": "timestamp" - }, - "type": "custom" + "name": "int4" + } }, "_gte": { + "type": "custom", "argument_type": { "type": "named", - "name": "timestamp" - }, - "type": "custom" + "name": "int4" + } + }, + "_in": { + "type": "in" }, "_lt": { + "type": "custom", "argument_type": { "type": "named", - "name": "timestamp" - }, - "type": "custom" + "name": "int4" + } }, "_lte": { + "type": "custom", "argument_type": { "type": "named", - "name": "timestamp" - }, - "type": "custom" + "name": "int4" + } }, "_neq": { + "type": "custom", "argument_type": { "type": "named", - "name": "timestamp" - }, - "type": "custom" + "name": "int4" + } } } }, - "varchar": { + "int8": { + "representation": { + "type": "json" + }, + "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "bit_and": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "bit_or": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "bit_xor": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "stddev": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "var_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "var_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "variance": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "int8" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "int8" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "int8" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "int8" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "int8" + } + } + } + }, + "interval": { + "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + }, + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "interval" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "interval" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "interval" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "interval" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "interval" + } + } + } + }, + "numeric": { + "representation": { + "type": "json" + }, + "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "stddev_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "var_pop": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "var_samp": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "variance": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "numeric" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "numeric" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "numeric" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "numeric" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "text": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_ilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_in": { + "type": "in" + }, + "_iregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_like": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_nilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_niregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_nlike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_nregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "_regex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "st_coveredby": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "st_covers": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "st_intersects": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "st_relatematch": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "starts_with": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + }, + "ts_match_tt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "text" + } + } + } + }, + "time": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "avg": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + }, + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "time" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "time" + } + } + }, + "sum": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "interval" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "time" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "time" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "time" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "time" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "time" + } + } + } + }, + "timestamp": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamp" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamp" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamp" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamp" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamp" + } + } + } + }, + "timestamptz": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamptz" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamptz" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamptz" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamptz" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamptz" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamptz" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timestamptz" + } + } + } + }, + "timetz": { + "representation": { + "type": "string" + }, + "aggregate_functions": { + "max": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timetz" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timetz" + } + } + } + }, + "comparison_operators": { + "_eq": { + "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timetz" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timetz" + } + }, + "_in": { + "type": "in" + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timetz" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timetz" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "timetz" + } + } + } + }, + "uuid": { + "representation": { + "type": "string" + }, "aggregate_functions": {}, "comparison_operators": { "_eq": { "type": "equal" }, "_gt": { + "type": "custom", "argument_type": { "type": "named", - "name": "varchar" - }, - "type": "custom" + "name": "uuid" + } }, "_gte": { + "type": "custom", "argument_type": { "type": "named", - "name": "varchar" - }, - "type": "custom" + "name": "uuid" + } }, - "_ilike": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_iregex": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_like": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" + "_in": { + "type": "in" }, "_lt": { + "type": "custom", "argument_type": { "type": "named", - "name": "varchar" - }, - "type": "custom" + "name": "uuid" + } }, "_lte": { + "type": "custom", "argument_type": { "type": "named", - "name": "varchar" - }, - "type": "custom" + "name": "uuid" + } }, "_neq": { + "type": "custom", "argument_type": { "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_nilike": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_niregex": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_nlike": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_nregex": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "_regex": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "st_coveredby": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "st_covers": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "st_intersects": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "st_relatematch": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "starts_with": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" - }, - "ts_match_tt": { - "argument_type": { - "type": "named", - "name": "varchar" - }, - "type": "custom" + "name": "uuid" + } } } }, - "int8": { + "varchar": { + "representation": { + "type": "string" + }, "aggregate_functions": { - "min": { - "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int8" - } - } - }, "max": { "result_type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int8" + "name": "text" + } + } + }, + "min": { + "result_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" } } } }, "comparison_operators": { - "_gt": { - "argument_type": { - "type": "named", - "name": "int8" - }, - "type": "custom" - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "int8" - }, - "type": "custom" - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "int8" - }, - "type": "custom" - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "int8" - }, - "type": "custom" - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "int8" - }, - "type": "custom" - }, "_eq": { "type": "equal" + }, + "_gt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_gte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_ilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_in": { + "type": "in" + }, + "_iregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_like": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_lt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_lte": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_neq": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_nilike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_niregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_nlike": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_nregex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "_regex": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "st_coveredby": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "st_covers": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "st_intersects": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "st_relatematch": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "starts_with": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } + }, + "ts_match_tt": { + "type": "custom", + "argument_type": { + "type": "named", + "name": "varchar" + } } - }, - "update_operators": {} + } } }, "object_types": { - "article": { - "description": "An article", - "fields": { - "id": { - "description": "The article's primary key", - "arguments": {}, - "type": { - "type": "named", - "name": "int4" - } - }, - "title": { - "description": "The article's title", - "arguments": {}, - "type": { - "type": "named", - "name": "varchar" - } - }, - "author_id": { - "description": "The article's author ID", - "arguments": {}, - "type": { - "type": "named", - "name": "int4" - } - } - } - }, - "author": { - "description": "An author", - "fields": { - "last_name": { - "description": "The author's last name", - "arguments": {}, - "type": { - "type": "named", - "name": "varchar" - } - }, - "first_name": { - "description": "The author's first name", - "arguments": {}, - "type": { - "type": "named", - "name": "varchar" - } - }, - "id": { - "description": "The author's primary key", - "arguments": {}, - "type": { - "type": "named", - "name": "int8" - } - } - } - }, "Album": { "description": "The record of all albums", "fields": { @@ -1318,6 +2554,408 @@ } } }, + "album_by_title": { + "fields": { + "AlbumId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "ArtistId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "Title": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "article": { + "fields": { + "author_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "title": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "articles_by_author": { + "fields": { + "author_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "title": { + "type": { + "type": "named", + "name": "character varying" + } + } + } + }, + "artist": { + "fields": { + "ArtistId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "Name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "artist_below_id": { + "fields": { + "ArtistId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "Name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "author": { + "fields": { + "first_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "last_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "country": { + "fields": { + "continent": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "institution": { + "fields": { + "departments": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "location": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "location" + } + } + }, + "name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "songs": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "institution_songs" + } + } + }, + "staff": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "staff" + } + } + } + } + } + } + }, + "institution_songs": { + "fields": { + "primary_anthem_track_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "secondary_anthem_track_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "location": { + "fields": { + "campuses": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "city": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "country": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "country" + } + } + } + } + }, + "movie_analytics": { + "fields": { + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "movie_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "movie_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "num_users_faved": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_users_watchlisted": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_views_day": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_votes_day": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "prev_day_scores": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "total_votes": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "pet": { + "fields": { + "age": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, "spatial_ref_sys": { "fields": { "auth_name": { @@ -1364,6 +3002,67 @@ } } }, + "staff": { + "fields": { + "favourite_artist_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "first_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "last_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "pets": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "pet" + } + } + } + } + }, + "specialities": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + } + } + }, "topology_layer": { "fields": { "child_id": { @@ -1452,35 +3151,4993 @@ } } } + }, + "update_column_Album_AlbumId": { + "description": "Update the 'AlbumId' column in the 'Album' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Album_ArtistId": { + "description": "Update the 'ArtistId' column in the 'Album' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Album_Title": { + "description": "Update the 'Title' column in the 'Album' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Artist_ArtistId": { + "description": "Update the 'ArtistId' column in the 'Artist' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Artist_Name": { + "description": "Update the 'Name' column in the 'Artist' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_Address": { + "description": "Update the 'Address' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_City": { + "description": "Update the 'City' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_Company": { + "description": "Update the 'Company' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_Country": { + "description": "Update the 'Country' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_CustomerId": { + "description": "Update the 'CustomerId' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Customer_Email": { + "description": "Update the 'Email' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Customer_Fax": { + "description": "Update the 'Fax' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_FirstName": { + "description": "Update the 'FirstName' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Customer_LastName": { + "description": "Update the 'LastName' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Customer_Phone": { + "description": "Update the 'Phone' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_PostalCode": { + "description": "Update the 'PostalCode' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_State": { + "description": "Update the 'State' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Customer_SupportRepId": { + "description": "Update the 'SupportRepId' column in the 'Customer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_Employee_Address": { + "description": "Update the 'Address' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_BirthDate": { + "description": "Update the 'BirthDate' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + } + } + }, + "update_column_Employee_City": { + "description": "Update the 'City' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_Country": { + "description": "Update the 'Country' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_Email": { + "description": "Update the 'Email' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_EmployeeId": { + "description": "Update the 'EmployeeId' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Employee_Fax": { + "description": "Update the 'Fax' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_FirstName": { + "description": "Update the 'FirstName' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Employee_HireDate": { + "description": "Update the 'HireDate' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + } + } + }, + "update_column_Employee_LastName": { + "description": "Update the 'LastName' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Employee_Phone": { + "description": "Update the 'Phone' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_PostalCode": { + "description": "Update the 'PostalCode' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_ReportsTo": { + "description": "Update the 'ReportsTo' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_Employee_State": { + "description": "Update the 'State' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Employee_Title": { + "description": "Update the 'Title' column in the 'Employee' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Genre_GenreId": { + "description": "Update the 'GenreId' column in the 'Genre' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Genre_Name": { + "description": "Update the 'Name' column in the 'Genre' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_InvoiceLine_InvoiceId": { + "description": "Update the 'InvoiceId' column in the 'InvoiceLine' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_InvoiceLine_InvoiceLineId": { + "description": "Update the 'InvoiceLineId' column in the 'InvoiceLine' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_InvoiceLine_Quantity": { + "description": "Update the 'Quantity' column in the 'InvoiceLine' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_InvoiceLine_TrackId": { + "description": "Update the 'TrackId' column in the 'InvoiceLine' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_InvoiceLine_UnitPrice": { + "description": "Update the 'UnitPrice' column in the 'InvoiceLine' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "update_column_Invoice_BillingAddress": { + "description": "Update the 'BillingAddress' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Invoice_BillingCity": { + "description": "Update the 'BillingCity' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Invoice_BillingCountry": { + "description": "Update the 'BillingCountry' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Invoice_BillingPostalCode": { + "description": "Update the 'BillingPostalCode' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Invoice_BillingState": { + "description": "Update the 'BillingState' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Invoice_CustomerId": { + "description": "Update the 'CustomerId' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Invoice_InvoiceDate": { + "description": "Update the 'InvoiceDate' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "timestamp" + } + } + } + }, + "update_column_Invoice_InvoiceId": { + "description": "Update the 'InvoiceId' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Invoice_Total": { + "description": "Update the 'Total' column in the 'Invoice' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "update_column_MediaType_MediaTypeId": { + "description": "Update the 'MediaTypeId' column in the 'MediaType' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_MediaType_Name": { + "description": "Update the 'Name' column in the 'MediaType' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_PlaylistTrack_PlaylistId": { + "description": "Update the 'PlaylistId' column in the 'PlaylistTrack' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_PlaylistTrack_TrackId": { + "description": "Update the 'TrackId' column in the 'PlaylistTrack' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Playlist_Name": { + "description": "Update the 'Name' column in the 'Playlist' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Playlist_PlaylistId": { + "description": "Update the 'PlaylistId' column in the 'Playlist' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Track_AlbumId": { + "description": "Update the 'AlbumId' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_Track_Bytes": { + "description": "Update the 'Bytes' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_Track_Composer": { + "description": "Update the 'Composer' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_Track_GenreId": { + "description": "Update the 'GenreId' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_Track_MediaTypeId": { + "description": "Update the 'MediaTypeId' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Track_Milliseconds": { + "description": "Update the 'Milliseconds' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Track_Name": { + "description": "Update the 'Name' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_Track_TrackId": { + "description": "Update the 'TrackId' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_Track_UnitPrice": { + "description": "Update the 'UnitPrice' column in the 'Track' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "update_column_article_author_id": { + "description": "Update the 'author_id' column in the 'article' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_article_id": { + "description": "Update the 'id' column in the 'article' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_article_title": { + "description": "Update the 'title' column in the 'article' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "update_column_author_first_name": { + "description": "Update the 'first_name' column in the 'author' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "update_column_author_id": { + "description": "Update the 'id' column in the 'author' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_author_last_name": { + "description": "Update the 'last_name' column in the 'author' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "update_column_institution_departments": { + "description": "Update the 'departments' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + } + } + }, + "update_column_institution_id": { + "description": "Update the 'id' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_institution_location": { + "description": "Update the 'location' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "location" + } + } + } + } + }, + "update_column_institution_name": { + "description": "Update the 'name' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "update_column_institution_songs": { + "description": "Update the 'songs' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "institution_songs" + } + } + } + } + }, + "update_column_institution_staff": { + "description": "Update the 'staff' column in the 'institution' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "staff" + } + } + } + } + } + } + }, + "update_column_movie_analytics_id": { + "description": "Update the 'id' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_movie_analytics_movie_id": { + "description": "Update the 'movie_id' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_movie_analytics_movie_name": { + "description": "Update the 'movie_name' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "update_column_movie_analytics_num_users_faved": { + "description": "Update the 'num_users_faved' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_movie_analytics_num_users_watchlisted": { + "description": "Update the 'num_users_watchlisted' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_movie_analytics_num_views_day": { + "description": "Update the 'num_views_day' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_movie_analytics_num_votes_day": { + "description": "Update the 'num_votes_day' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_movie_analytics_prev_day_scores": { + "description": "Update the 'prev_day_scores' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_movie_analytics_total_votes": { + "description": "Update the 'total_votes' column in the 'movie_analytics' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_spatial_ref_sys_auth_name": { + "description": "Update the 'auth_name' column in the 'spatial_ref_sys' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_spatial_ref_sys_auth_srid": { + "description": "Update the 'auth_srid' column in the 'spatial_ref_sys' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_spatial_ref_sys_proj4text": { + "description": "Update the 'proj4text' column in the 'spatial_ref_sys' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_spatial_ref_sys_srid": { + "description": "Update the 'srid' column in the 'spatial_ref_sys' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_spatial_ref_sys_srtext": { + "description": "Update the 'srtext' column in the 'spatial_ref_sys' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "update_column_topology_layer_child_id": { + "description": "Update the 'child_id' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "update_column_topology_layer_feature_column": { + "description": "Update the 'feature_column' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_topology_layer_feature_type": { + "description": "Update the 'feature_type' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_topology_layer_layer_id": { + "description": "Update the 'layer_id' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_topology_layer_level": { + "description": "Update the 'level' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_topology_layer_schema_name": { + "description": "Update the 'schema_name' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_topology_layer_table_name": { + "description": "Update the 'table_name' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_topology_layer_topology_id": { + "description": "Update the 'topology_id' column in the 'topology_layer' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_topology_topology_hasz": { + "description": "Update the 'hasz' column in the 'topology_topology' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "bool" + } + } + } + }, + "update_column_topology_topology_id": { + "description": "Update the 'id' column in the 'topology_topology' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "update_column_topology_topology_name": { + "description": "Update the 'name' column in the 'topology_topology' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "update_column_topology_topology_precision": { + "description": "Update the 'precision' column in the 'topology_topology' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "float8" + } + } + } + }, + "update_column_topology_topology_srid": { + "description": "Update the 'srid' column in the 'topology_topology' collection", + "fields": { + "_set": { + "description": "Set the column to this value", + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "v2_delete_Album_by_AlbumId_response": { + "description": "Responses from the 'v2_delete_Album_by_AlbumId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Album" + } + } + } + } + }, + "v2_delete_Artist_by_ArtistId_response": { + "description": "Responses from the 'v2_delete_Artist_by_ArtistId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Artist" + } + } + } + } + }, + "v2_delete_Customer_by_CustomerId_response": { + "description": "Responses from the 'v2_delete_Customer_by_CustomerId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Customer" + } + } + } + } + }, + "v2_delete_Employee_by_EmployeeId_response": { + "description": "Responses from the 'v2_delete_Employee_by_EmployeeId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Employee" + } + } + } + } + }, + "v2_delete_Genre_by_GenreId_response": { + "description": "Responses from the 'v2_delete_Genre_by_GenreId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Genre" + } + } + } + } + }, + "v2_delete_InvoiceLine_by_InvoiceLineId_response": { + "description": "Responses from the 'v2_delete_InvoiceLine_by_InvoiceLineId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "InvoiceLine" + } + } + } + } + }, + "v2_delete_Invoice_by_InvoiceId_response": { + "description": "Responses from the 'v2_delete_Invoice_by_InvoiceId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Invoice" + } + } + } + } + }, + "v2_delete_MediaType_by_MediaTypeId_response": { + "description": "Responses from the 'v2_delete_MediaType_by_MediaTypeId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "MediaType" + } + } + } + } + }, + "v2_delete_PlaylistTrack_by_PlaylistId_and_TrackId_response": { + "description": "Responses from the 'v2_delete_PlaylistTrack_by_PlaylistId_and_TrackId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "PlaylistTrack" + } + } + } + } + }, + "v2_delete_Playlist_by_PlaylistId_response": { + "description": "Responses from the 'v2_delete_Playlist_by_PlaylistId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Playlist" + } + } + } + } + }, + "v2_delete_Track_by_TrackId_response": { + "description": "Responses from the 'v2_delete_Track_by_TrackId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Track" + } + } + } + } + }, + "v2_delete_article_by_id_response": { + "description": "Responses from the 'v2_delete_article_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "article" + } + } + } + } + }, + "v2_delete_author_by_id_response": { + "description": "Responses from the 'v2_delete_author_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "author" + } + } + } + } + }, + "v2_delete_institution_by_id_response": { + "description": "Responses from the 'v2_delete_institution_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "institution" + } + } + } + } + }, + "v2_delete_movie_analytics_by_id_response": { + "description": "Responses from the 'v2_delete_movie_analytics_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "movie_analytics" + } + } + } + } + }, + "v2_delete_spatial_ref_sys_by_srid_response": { + "description": "Responses from the 'v2_delete_spatial_ref_sys_by_srid' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "spatial_ref_sys" + } + } + } + } + }, + "v2_delete_topology_layer_by_feature_column_and_schema_name_and_table_name_response": { + "description": "Responses from the 'v2_delete_topology_layer_by_feature_column_and_schema_name_and_table_name' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_layer" + } + } + } + } + }, + "v2_delete_topology_layer_by_layer_id_and_topology_id_response": { + "description": "Responses from the 'v2_delete_topology_layer_by_layer_id_and_topology_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_layer" + } + } + } + } + }, + "v2_delete_topology_topology_by_id_response": { + "description": "Responses from the 'v2_delete_topology_topology_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_topology" + } + } + } + } + }, + "v2_delete_topology_topology_by_name_response": { + "description": "Responses from the 'v2_delete_topology_topology_by_name' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_topology" + } + } + } + } + }, + "v2_insert_Album_object": { + "fields": { + "AlbumId": { + "description": "The identifier of an album", + "type": { + "type": "named", + "name": "int4" + } + }, + "ArtistId": { + "description": "The id of the artist that authored the album", + "type": { + "type": "named", + "name": "int4" + } + }, + "Title": { + "description": "The title of an album", + "type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "v2_insert_Album_response": { + "description": "Responses from the 'v2_insert_Album' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Album" + } + } + } + } + }, + "v2_insert_Artist_object": { + "fields": { + "ArtistId": { + "description": "The identifier of an artist", + "type": { + "type": "named", + "name": "int4" + } + }, + "Name": { + "description": "The name of an artist", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "v2_insert_Artist_response": { + "description": "Responses from the 'v2_insert_Artist' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Artist" + } + } + } + } + }, + "v2_insert_Customer_object": { + "fields": { + "Address": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "City": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "Company": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "Country": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "CustomerId": { + "description": "The identifier of customer", + "type": { + "type": "named", + "name": "int4" + } + }, + "Email": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "Fax": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "FirstName": { + "description": "The first name of a customer", + "type": { + "type": "named", + "name": "varchar" + } + }, + "LastName": { + "description": "The last name of a customer", + "type": { + "type": "named", + "name": "varchar" + } + }, + "Phone": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "PostalCode": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "State": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "SupportRepId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "v2_insert_Customer_response": { + "description": "Responses from the 'v2_insert_Customer' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Customer" + } + } + } + } + }, + "v2_insert_Employee_object": { + "fields": { + "Address": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "BirthDate": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + }, + "City": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "Country": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "Email": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "EmployeeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Fax": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "FirstName": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "HireDate": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + }, + "LastName": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "Phone": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "PostalCode": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "ReportsTo": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "State": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "Title": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "v2_insert_Employee_response": { + "description": "Responses from the 'v2_insert_Employee' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Employee" + } + } + } + } + }, + "v2_insert_Genre_object": { + "fields": { + "GenreId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "v2_insert_Genre_response": { + "description": "Responses from the 'v2_insert_Genre' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Genre" + } + } + } + } + }, + "v2_insert_InvoiceLine_object": { + "fields": { + "InvoiceId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "InvoiceLineId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Quantity": { + "type": { + "type": "named", + "name": "int4" + } + }, + "TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "UnitPrice": { + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "v2_insert_InvoiceLine_response": { + "description": "Responses from the 'v2_insert_InvoiceLine' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "InvoiceLine" + } + } + } + } + }, + "v2_insert_Invoice_object": { + "fields": { + "BillingAddress": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "BillingCity": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "BillingCountry": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "BillingPostalCode": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "BillingState": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "CustomerId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "InvoiceDate": { + "type": { + "type": "named", + "name": "timestamp" + } + }, + "InvoiceId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Total": { + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "v2_insert_Invoice_response": { + "description": "Responses from the 'v2_insert_Invoice' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Invoice" + } + } + } + } + }, + "v2_insert_MediaType_object": { + "fields": { + "MediaTypeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "v2_insert_MediaType_response": { + "description": "Responses from the 'v2_insert_MediaType' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "MediaType" + } + } + } + } + }, + "v2_insert_PlaylistTrack_object": { + "fields": { + "PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "TrackId": { + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "v2_insert_PlaylistTrack_response": { + "description": "Responses from the 'v2_insert_PlaylistTrack' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "PlaylistTrack" + } + } + } + } + }, + "v2_insert_Playlist_object": { + "fields": { + "Name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "v2_insert_Playlist_response": { + "description": "Responses from the 'v2_insert_Playlist' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Playlist" + } + } + } + } + }, + "v2_insert_Track_object": { + "fields": { + "AlbumId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "Bytes": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "Composer": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "GenreId": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "MediaTypeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Milliseconds": { + "type": { + "type": "named", + "name": "int4" + } + }, + "Name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "UnitPrice": { + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "v2_insert_Track_response": { + "description": "Responses from the 'v2_insert_Track' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Track" + } + } + } + } + }, + "v2_insert_article_object": { + "fields": { + "author_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "title": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "v2_insert_article_response": { + "description": "Responses from the 'v2_insert_article' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "article" + } + } + } + } + }, + "v2_insert_author_object": { + "fields": { + "first_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "last_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "v2_insert_author_response": { + "description": "Responses from the 'v2_insert_author' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "author" + } + } + } + } + }, + "v2_insert_institution_object": { + "fields": { + "departments": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + } + } + }, + "id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "location": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "location" + } + } + }, + "name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "songs": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "institution_songs" + } + } + }, + "staff": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "array", + "element_type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "staff" + } + } + } + } + } + } + }, + "v2_insert_institution_response": { + "description": "Responses from the 'v2_insert_institution' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "institution" + } + } + } + } + }, + "v2_insert_movie_analytics_object": { + "fields": { + "id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "movie_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "movie_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "num_users_faved": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_users_watchlisted": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_views_day": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "num_votes_day": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "prev_day_scores": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "total_votes": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + } + }, + "v2_insert_movie_analytics_response": { + "description": "Responses from the 'v2_insert_movie_analytics' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "movie_analytics" + } + } + } + } + }, + "v2_insert_spatial_ref_sys_object": { + "fields": { + "auth_name": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "auth_srid": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "proj4text": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + }, + "srid": { + "type": { + "type": "named", + "name": "int4" + } + }, + "srtext": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } + }, + "v2_insert_spatial_ref_sys_response": { + "description": "Responses from the 'v2_insert_spatial_ref_sys' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "spatial_ref_sys" + } + } + } + } + }, + "v2_insert_topology_layer_object": { + "fields": { + "child_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "feature_column": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "feature_type": { + "type": { + "type": "named", + "name": "int4" + } + }, + "layer_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "level": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "schema_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "table_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "topology_id": { + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "v2_insert_topology_layer_response": { + "description": "Responses from the 'v2_insert_topology_layer' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_layer" + } + } + } + } + }, + "v2_insert_topology_topology_object": { + "fields": { + "hasz": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } + } + }, + "id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "precision": { + "type": { + "type": "named", + "name": "float8" + } + }, + "srid": { + "type": { + "type": "named", + "name": "int4" + } + } + } + }, + "v2_insert_topology_topology_response": { + "description": "Responses from the 'v2_insert_topology_topology' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_topology" + } + } + } + } + }, + "v2_update_Album_by_AlbumId_response": { + "description": "Responses from the 'v2_update_Album_by_AlbumId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Album" + } + } + } + } + }, + "v2_update_Album_by_AlbumId_update_columns": { + "description": "Update the columns of the 'Album' collection", + "fields": { + "AlbumId": { + "description": "Update the 'AlbumId' column in the 'Album' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Album_AlbumId" + } + } + }, + "ArtistId": { + "description": "Update the 'ArtistId' column in the 'Album' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Album_ArtistId" + } + } + }, + "Title": { + "description": "Update the 'Title' column in the 'Album' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Album_Title" + } + } + } + } + }, + "v2_update_Artist_by_ArtistId_response": { + "description": "Responses from the 'v2_update_Artist_by_ArtistId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Artist" + } + } + } + } + }, + "v2_update_Artist_by_ArtistId_update_columns": { + "description": "Update the columns of the 'Artist' collection", + "fields": { + "ArtistId": { + "description": "Update the 'ArtistId' column in the 'Artist' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Artist_ArtistId" + } + } + }, + "Name": { + "description": "Update the 'Name' column in the 'Artist' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Artist_Name" + } + } + } + } + }, + "v2_update_Customer_by_CustomerId_response": { + "description": "Responses from the 'v2_update_Customer_by_CustomerId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Customer" + } + } + } + } + }, + "v2_update_Customer_by_CustomerId_update_columns": { + "description": "Update the columns of the 'Customer' collection", + "fields": { + "Address": { + "description": "Update the 'Address' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Address" + } + } + }, + "City": { + "description": "Update the 'City' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_City" + } + } + }, + "Company": { + "description": "Update the 'Company' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Company" + } + } + }, + "Country": { + "description": "Update the 'Country' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Country" + } + } + }, + "CustomerId": { + "description": "Update the 'CustomerId' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_CustomerId" + } + } + }, + "Email": { + "description": "Update the 'Email' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Email" + } + } + }, + "Fax": { + "description": "Update the 'Fax' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Fax" + } + } + }, + "FirstName": { + "description": "Update the 'FirstName' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_FirstName" + } + } + }, + "LastName": { + "description": "Update the 'LastName' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_LastName" + } + } + }, + "Phone": { + "description": "Update the 'Phone' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_Phone" + } + } + }, + "PostalCode": { + "description": "Update the 'PostalCode' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_PostalCode" + } + } + }, + "State": { + "description": "Update the 'State' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_State" + } + } + }, + "SupportRepId": { + "description": "Update the 'SupportRepId' column in the 'Customer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Customer_SupportRepId" + } + } + } + } + }, + "v2_update_Employee_by_EmployeeId_response": { + "description": "Responses from the 'v2_update_Employee_by_EmployeeId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Employee" + } + } + } + } + }, + "v2_update_Employee_by_EmployeeId_update_columns": { + "description": "Update the columns of the 'Employee' collection", + "fields": { + "Address": { + "description": "Update the 'Address' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Address" + } + } + }, + "BirthDate": { + "description": "Update the 'BirthDate' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_BirthDate" + } + } + }, + "City": { + "description": "Update the 'City' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_City" + } + } + }, + "Country": { + "description": "Update the 'Country' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Country" + } + } + }, + "Email": { + "description": "Update the 'Email' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Email" + } + } + }, + "EmployeeId": { + "description": "Update the 'EmployeeId' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_EmployeeId" + } + } + }, + "Fax": { + "description": "Update the 'Fax' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Fax" + } + } + }, + "FirstName": { + "description": "Update the 'FirstName' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_FirstName" + } + } + }, + "HireDate": { + "description": "Update the 'HireDate' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_HireDate" + } + } + }, + "LastName": { + "description": "Update the 'LastName' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_LastName" + } + } + }, + "Phone": { + "description": "Update the 'Phone' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Phone" + } + } + }, + "PostalCode": { + "description": "Update the 'PostalCode' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_PostalCode" + } + } + }, + "ReportsTo": { + "description": "Update the 'ReportsTo' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_ReportsTo" + } + } + }, + "State": { + "description": "Update the 'State' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_State" + } + } + }, + "Title": { + "description": "Update the 'Title' column in the 'Employee' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Employee_Title" + } + } + } + } + }, + "v2_update_Genre_by_GenreId_response": { + "description": "Responses from the 'v2_update_Genre_by_GenreId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Genre" + } + } + } + } + }, + "v2_update_Genre_by_GenreId_update_columns": { + "description": "Update the columns of the 'Genre' collection", + "fields": { + "GenreId": { + "description": "Update the 'GenreId' column in the 'Genre' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Genre_GenreId" + } + } + }, + "Name": { + "description": "Update the 'Name' column in the 'Genre' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Genre_Name" + } + } + } + } + }, + "v2_update_InvoiceLine_by_InvoiceLineId_response": { + "description": "Responses from the 'v2_update_InvoiceLine_by_InvoiceLineId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "InvoiceLine" + } + } + } + } + }, + "v2_update_InvoiceLine_by_InvoiceLineId_update_columns": { + "description": "Update the columns of the 'InvoiceLine' collection", + "fields": { + "InvoiceId": { + "description": "Update the 'InvoiceId' column in the 'InvoiceLine' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_InvoiceLine_InvoiceId" + } + } + }, + "InvoiceLineId": { + "description": "Update the 'InvoiceLineId' column in the 'InvoiceLine' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_InvoiceLine_InvoiceLineId" + } + } + }, + "Quantity": { + "description": "Update the 'Quantity' column in the 'InvoiceLine' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_InvoiceLine_Quantity" + } + } + }, + "TrackId": { + "description": "Update the 'TrackId' column in the 'InvoiceLine' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_InvoiceLine_TrackId" + } + } + }, + "UnitPrice": { + "description": "Update the 'UnitPrice' column in the 'InvoiceLine' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_InvoiceLine_UnitPrice" + } + } + } + } + }, + "v2_update_Invoice_by_InvoiceId_response": { + "description": "Responses from the 'v2_update_Invoice_by_InvoiceId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Invoice" + } + } + } + } + }, + "v2_update_Invoice_by_InvoiceId_update_columns": { + "description": "Update the columns of the 'Invoice' collection", + "fields": { + "BillingAddress": { + "description": "Update the 'BillingAddress' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_BillingAddress" + } + } + }, + "BillingCity": { + "description": "Update the 'BillingCity' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_BillingCity" + } + } + }, + "BillingCountry": { + "description": "Update the 'BillingCountry' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_BillingCountry" + } + } + }, + "BillingPostalCode": { + "description": "Update the 'BillingPostalCode' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_BillingPostalCode" + } + } + }, + "BillingState": { + "description": "Update the 'BillingState' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_BillingState" + } + } + }, + "CustomerId": { + "description": "Update the 'CustomerId' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_CustomerId" + } + } + }, + "InvoiceDate": { + "description": "Update the 'InvoiceDate' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_InvoiceDate" + } + } + }, + "InvoiceId": { + "description": "Update the 'InvoiceId' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_InvoiceId" + } + } + }, + "Total": { + "description": "Update the 'Total' column in the 'Invoice' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Invoice_Total" + } + } + } + } + }, + "v2_update_MediaType_by_MediaTypeId_response": { + "description": "Responses from the 'v2_update_MediaType_by_MediaTypeId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "MediaType" + } + } + } + } + }, + "v2_update_MediaType_by_MediaTypeId_update_columns": { + "description": "Update the columns of the 'MediaType' collection", + "fields": { + "MediaTypeId": { + "description": "Update the 'MediaTypeId' column in the 'MediaType' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_MediaType_MediaTypeId" + } + } + }, + "Name": { + "description": "Update the 'Name' column in the 'MediaType' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_MediaType_Name" + } + } + } + } + }, + "v2_update_PlaylistTrack_by_PlaylistId_and_TrackId_response": { + "description": "Responses from the 'v2_update_PlaylistTrack_by_PlaylistId_and_TrackId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "PlaylistTrack" + } + } + } + } + }, + "v2_update_PlaylistTrack_by_PlaylistId_and_TrackId_update_columns": { + "description": "Update the columns of the 'PlaylistTrack' collection", + "fields": { + "PlaylistId": { + "description": "Update the 'PlaylistId' column in the 'PlaylistTrack' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_PlaylistTrack_PlaylistId" + } + } + }, + "TrackId": { + "description": "Update the 'TrackId' column in the 'PlaylistTrack' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_PlaylistTrack_TrackId" + } + } + } + } + }, + "v2_update_Playlist_by_PlaylistId_response": { + "description": "Responses from the 'v2_update_Playlist_by_PlaylistId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Playlist" + } + } + } + } + }, + "v2_update_Playlist_by_PlaylistId_update_columns": { + "description": "Update the columns of the 'Playlist' collection", + "fields": { + "Name": { + "description": "Update the 'Name' column in the 'Playlist' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Playlist_Name" + } + } + }, + "PlaylistId": { + "description": "Update the 'PlaylistId' column in the 'Playlist' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Playlist_PlaylistId" + } + } + } + } + }, + "v2_update_Track_by_TrackId_response": { + "description": "Responses from the 'v2_update_Track_by_TrackId' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "Track" + } + } + } + } + }, + "v2_update_Track_by_TrackId_update_columns": { + "description": "Update the columns of the 'Track' collection", + "fields": { + "AlbumId": { + "description": "Update the 'AlbumId' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_AlbumId" + } + } + }, + "Bytes": { + "description": "Update the 'Bytes' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_Bytes" + } + } + }, + "Composer": { + "description": "Update the 'Composer' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_Composer" + } + } + }, + "GenreId": { + "description": "Update the 'GenreId' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_GenreId" + } + } + }, + "MediaTypeId": { + "description": "Update the 'MediaTypeId' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_MediaTypeId" + } + } + }, + "Milliseconds": { + "description": "Update the 'Milliseconds' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_Milliseconds" + } + } + }, + "Name": { + "description": "Update the 'Name' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_Name" + } + } + }, + "TrackId": { + "description": "Update the 'TrackId' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_TrackId" + } + } + }, + "UnitPrice": { + "description": "Update the 'UnitPrice' column in the 'Track' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_Track_UnitPrice" + } + } + } + } + }, + "v2_update_article_by_id_response": { + "description": "Responses from the 'v2_update_article_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "article" + } + } + } + } + }, + "v2_update_article_by_id_update_columns": { + "description": "Update the columns of the 'article' collection", + "fields": { + "author_id": { + "description": "Update the 'author_id' column in the 'article' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_article_author_id" + } + } + }, + "id": { + "description": "Update the 'id' column in the 'article' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_article_id" + } + } + }, + "title": { + "description": "Update the 'title' column in the 'article' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_article_title" + } + } + } + } + }, + "v2_update_author_by_id_response": { + "description": "Responses from the 'v2_update_author_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "author" + } + } + } + } + }, + "v2_update_author_by_id_update_columns": { + "description": "Update the columns of the 'author' collection", + "fields": { + "first_name": { + "description": "Update the 'first_name' column in the 'author' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_author_first_name" + } + } + }, + "id": { + "description": "Update the 'id' column in the 'author' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_author_id" + } + } + }, + "last_name": { + "description": "Update the 'last_name' column in the 'author' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_author_last_name" + } + } + } + } + }, + "v2_update_institution_by_id_response": { + "description": "Responses from the 'v2_update_institution_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "institution" + } + } + } + } + }, + "v2_update_institution_by_id_update_columns": { + "description": "Update the columns of the 'institution' collection", + "fields": { + "departments": { + "description": "Update the 'departments' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_departments" + } + } + }, + "id": { + "description": "Update the 'id' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_id" + } + } + }, + "location": { + "description": "Update the 'location' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_location" + } + } + }, + "name": { + "description": "Update the 'name' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_name" + } + } + }, + "songs": { + "description": "Update the 'songs' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_songs" + } + } + }, + "staff": { + "description": "Update the 'staff' column in the 'institution' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_institution_staff" + } + } + } + } + }, + "v2_update_movie_analytics_by_id_response": { + "description": "Responses from the 'v2_update_movie_analytics_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "movie_analytics" + } + } + } + } + }, + "v2_update_movie_analytics_by_id_update_columns": { + "description": "Update the columns of the 'movie_analytics' collection", + "fields": { + "id": { + "description": "Update the 'id' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_id" + } + } + }, + "movie_id": { + "description": "Update the 'movie_id' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_movie_id" + } + } + }, + "movie_name": { + "description": "Update the 'movie_name' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_movie_name" + } + } + }, + "num_users_faved": { + "description": "Update the 'num_users_faved' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_num_users_faved" + } + } + }, + "num_users_watchlisted": { + "description": "Update the 'num_users_watchlisted' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_num_users_watchlisted" + } + } + }, + "num_views_day": { + "description": "Update the 'num_views_day' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_num_views_day" + } + } + }, + "num_votes_day": { + "description": "Update the 'num_votes_day' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_num_votes_day" + } + } + }, + "prev_day_scores": { + "description": "Update the 'prev_day_scores' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_prev_day_scores" + } + } + }, + "total_votes": { + "description": "Update the 'total_votes' column in the 'movie_analytics' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_movie_analytics_total_votes" + } + } + } + } + }, + "v2_update_spatial_ref_sys_by_srid_response": { + "description": "Responses from the 'v2_update_spatial_ref_sys_by_srid' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "spatial_ref_sys" + } + } + } + } + }, + "v2_update_spatial_ref_sys_by_srid_update_columns": { + "description": "Update the columns of the 'spatial_ref_sys' collection", + "fields": { + "auth_name": { + "description": "Update the 'auth_name' column in the 'spatial_ref_sys' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_spatial_ref_sys_auth_name" + } + } + }, + "auth_srid": { + "description": "Update the 'auth_srid' column in the 'spatial_ref_sys' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_spatial_ref_sys_auth_srid" + } + } + }, + "proj4text": { + "description": "Update the 'proj4text' column in the 'spatial_ref_sys' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_spatial_ref_sys_proj4text" + } + } + }, + "srid": { + "description": "Update the 'srid' column in the 'spatial_ref_sys' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_spatial_ref_sys_srid" + } + } + }, + "srtext": { + "description": "Update the 'srtext' column in the 'spatial_ref_sys' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_spatial_ref_sys_srtext" + } + } + } + } + }, + "v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name_response": { + "description": "Responses from the 'v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_layer" + } + } + } + } + }, + "v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name_update_columns": { + "description": "Update the columns of the 'topology_layer' collection", + "fields": { + "child_id": { + "description": "Update the 'child_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_child_id" + } + } + }, + "feature_column": { + "description": "Update the 'feature_column' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_feature_column" + } + } + }, + "feature_type": { + "description": "Update the 'feature_type' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_feature_type" + } + } + }, + "layer_id": { + "description": "Update the 'layer_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_layer_id" + } + } + }, + "level": { + "description": "Update the 'level' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_level" + } + } + }, + "schema_name": { + "description": "Update the 'schema_name' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_schema_name" + } + } + }, + "table_name": { + "description": "Update the 'table_name' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_table_name" + } + } + }, + "topology_id": { + "description": "Update the 'topology_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_topology_id" + } + } + } + } + }, + "v2_update_topology_layer_by_layer_id_and_topology_id_response": { + "description": "Responses from the 'v2_update_topology_layer_by_layer_id_and_topology_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_layer" + } + } + } + } + }, + "v2_update_topology_layer_by_layer_id_and_topology_id_update_columns": { + "description": "Update the columns of the 'topology_layer' collection", + "fields": { + "child_id": { + "description": "Update the 'child_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_child_id" + } + } + }, + "feature_column": { + "description": "Update the 'feature_column' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_feature_column" + } + } + }, + "feature_type": { + "description": "Update the 'feature_type' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_feature_type" + } + } + }, + "layer_id": { + "description": "Update the 'layer_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_layer_id" + } + } + }, + "level": { + "description": "Update the 'level' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_level" + } + } + }, + "schema_name": { + "description": "Update the 'schema_name' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_schema_name" + } + } + }, + "table_name": { + "description": "Update the 'table_name' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_table_name" + } + } + }, + "topology_id": { + "description": "Update the 'topology_id' column in the 'topology_layer' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_layer_topology_id" + } + } + } + } + }, + "v2_update_topology_topology_by_id_response": { + "description": "Responses from the 'v2_update_topology_topology_by_id' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_topology" + } + } + } + } + }, + "v2_update_topology_topology_by_id_update_columns": { + "description": "Update the columns of the 'topology_topology' collection", + "fields": { + "hasz": { + "description": "Update the 'hasz' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_hasz" + } + } + }, + "id": { + "description": "Update the 'id' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_id" + } + } + }, + "name": { + "description": "Update the 'name' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_name" + } + } + }, + "precision": { + "description": "Update the 'precision' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_precision" + } + } + }, + "srid": { + "description": "Update the 'srid' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_srid" + } + } + } + } + }, + "v2_update_topology_topology_by_name_response": { + "description": "Responses from the 'v2_update_topology_topology_by_name' procedure", + "fields": { + "affected_rows": { + "description": "The number of rows affected by the mutation", + "type": { + "type": "named", + "name": "int4" + } + }, + "returning": { + "description": "Data from rows affected by the mutation", + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "topology_topology" + } + } + } + } + }, + "v2_update_topology_topology_by_name_update_columns": { + "description": "Update the columns of the 'topology_topology' collection", + "fields": { + "hasz": { + "description": "Update the 'hasz' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_hasz" + } + } + }, + "id": { + "description": "Update the 'id' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_id" + } + } + }, + "name": { + "description": "Update the 'name' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_name" + } + } + }, + "precision": { + "description": "Update the 'precision' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_precision" + } + } + }, + "srid": { + "description": "Update the 'srid' column in the 'topology_topology' collection.", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "update_column_topology_topology_srid" + } + } + } + } + }, + "value_types": { + "fields": { + "bool": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } + } + }, + "char": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "char" + } + } + }, + "date": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "date" + } + } + }, + "float4": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float4" + } + } + }, + "float8": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "int2": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } + } + }, + "int4": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "int8": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "numeric": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "text": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "time": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "time" + } + } + }, + "timestamp": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + }, + "timestamptz": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamptz" + } + } + }, + "timetz": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timetz" + } + } + }, + "uuid": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "uuid" + } + } + }, + "varchar": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + } } }, "collections": [ - { - "name": "article", - "description": "A collection of articles", - "arguments": {}, - "type": "article", - "deletable": false, - "uniqueness_constraints": { - "ArticleByID": { - "unique_columns": ["id"] - } - }, - "foreign_keys": {} - }, - { - "name": "author", - "description": "A collection of authors", - "arguments": {}, - "type": "author", - "deletable": false, - "uniqueness_constraints": { - "AuthorByID": { - "unique_columns": ["id"] - } - }, - "foreign_keys": {} - }, { "name": "Album", "description": "The record of all albums", @@ -1678,6 +8335,50 @@ } } }, + { + "name": "article", + "arguments": {}, + "type": "article", + "uniqueness_constraints": { + "article_pkey": { + "unique_columns": ["id"] + } + }, + "foreign_keys": {} + }, + { + "name": "author", + "arguments": {}, + "type": "author", + "uniqueness_constraints": { + "author_pkey": { + "unique_columns": ["id"] + } + }, + "foreign_keys": {} + }, + { + "name": "institution", + "arguments": {}, + "type": "institution", + "uniqueness_constraints": { + "institution_pkey": { + "unique_columns": ["id"] + } + }, + "foreign_keys": {} + }, + { + "name": "movie_analytics", + "arguments": {}, + "type": "movie_analytics", + "uniqueness_constraints": { + "movie_analytics_pkey": { + "unique_columns": ["id"] + } + }, + "foreign_keys": {} + }, { "name": "spatial_ref_sys", "arguments": {}, @@ -1727,137 +8428,1952 @@ } }, "foreign_keys": {} - } - ], - "functions": [ - { - "name": "latest_article_id", - "description": "Get the ID of the most recent article", - "arguments": {}, - "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int4" - } - } }, { - "name": "latest_article", - "description": "Get the most recent article", - "arguments": {}, - "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "article" - } - } - }, - { - "name": "get_article_by_id", - "description": "Insert or update an article", + "name": "album_by_title", "arguments": { "id": { - "description": "the id of the article to fetch", "type": { - "type": "named", - "name": "Int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "title": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } } } }, - "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "article" - } - } + "type": "album_by_title", + "uniqueness_constraints": {}, + "foreign_keys": {} }, { - "name": "get_author_by_id", - "description": "Get artist based on id", + "name": "articles_by_author", + "arguments": { + "author_id": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + }, + "type": "articles_by_author", + "uniqueness_constraints": {}, + "foreign_keys": {} + }, + { + "name": "artist", + "arguments": {}, + "type": "artist", + "uniqueness_constraints": {}, + "foreign_keys": {} + }, + { + "name": "artist_below_id", "arguments": { "id": { - "description": "the id of the artist to fetch", + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + } + }, + "type": "artist_below_id", + "uniqueness_constraints": {}, + "foreign_keys": {} + }, + { + "name": "value_types", + "arguments": { + "bool": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "bool" + } + } + }, + "char": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "char" + } + } + }, + "date": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "date" + } + } + }, + "float4": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float4" + } + } + }, + "float8": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "float8" + } + } + }, + "int2": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int2" + } + } + }, + "int4": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int4" + } + } + }, + "int8": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int8" + } + } + }, + "numeric": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "numeric" + } + } + }, + "text": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "text" + } + } + }, + "time": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "time" + } + } + }, + "timestamp": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamp" + } + } + }, + "timestamptz": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timestamptz" + } + } + }, + "timetz": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "timetz" + } + } + }, + "uuid": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "uuid" + } + } + }, + "varchar": { + "type": { + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } + } + } + }, + "type": "value_types", + "uniqueness_constraints": {}, + "foreign_keys": {} + } + ], + "functions": [], + "procedures": [ + { + "name": "v2_delete_Album_by_AlbumId", + "description": "Delete any row on the 'Album' collection using the 'AlbumId' key", + "arguments": { + "key_AlbumId": { + "description": "The identifier of an album", "type": { "type": "named", "name": "int4" } - } - }, - "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "author" - } - } - } - ], - "procedures": [ - { - "name": "upsert_article", - "description": "Insert or update an article", - "arguments": { - "article": { - "description": "The article to insert or update", + }, + "pre_check": { + "description": "Delete permission predicate over the 'Album' collection", "type": { - "type": "named", - "name": "article" + "type": "predicate", + "object_type_name": "Album" } } }, "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "article" - } + "type": "named", + "name": "v2_delete_Album_by_AlbumId_response" } }, { - "name": "update_article_title_by_id", - "description": "Update an article title given the ID and new title", + "name": "v2_delete_Artist_by_ArtistId", + "description": "Delete any row on the 'Artist' collection using the 'ArtistId' key", "arguments": { - "id": { - "description": "the id of the article to update", + "key_ArtistId": { + "description": "The identifier of an artist", "type": { "type": "named", - "name": "Int" + "name": "int4" } }, - "title": { - "description": "the new title of the article", + "pre_check": { + "description": "Delete permission predicate over the 'Artist' collection", "type": { - "type": "named", - "name": "String" + "type": "predicate", + "object_type_name": "Artist" } } }, "result_type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "article" + "type": "named", + "name": "v2_delete_Artist_by_ArtistId_response" + } + }, + { + "name": "v2_delete_Customer_by_CustomerId", + "description": "Delete any row on the 'Customer' collection using the 'CustomerId' key", + "arguments": { + "key_CustomerId": { + "description": "The identifier of customer", + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Customer' collection", + "type": { + "type": "predicate", + "object_type_name": "Customer" + } } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Customer_by_CustomerId_response" + } + }, + { + "name": "v2_delete_Employee_by_EmployeeId", + "description": "Delete any row on the 'Employee' collection using the 'EmployeeId' key", + "arguments": { + "key_EmployeeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Employee' collection", + "type": { + "type": "predicate", + "object_type_name": "Employee" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Employee_by_EmployeeId_response" + } + }, + { + "name": "v2_delete_Genre_by_GenreId", + "description": "Delete any row on the 'Genre' collection using the 'GenreId' key", + "arguments": { + "key_GenreId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Genre' collection", + "type": { + "type": "predicate", + "object_type_name": "Genre" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Genre_by_GenreId_response" + } + }, + { + "name": "v2_delete_InvoiceLine_by_InvoiceLineId", + "description": "Delete any row on the 'InvoiceLine' collection using the 'InvoiceLineId' key", + "arguments": { + "key_InvoiceLineId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'InvoiceLine' collection", + "type": { + "type": "predicate", + "object_type_name": "InvoiceLine" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_InvoiceLine_by_InvoiceLineId_response" + } + }, + { + "name": "v2_delete_Invoice_by_InvoiceId", + "description": "Delete any row on the 'Invoice' collection using the 'InvoiceId' key", + "arguments": { + "key_InvoiceId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Invoice' collection", + "type": { + "type": "predicate", + "object_type_name": "Invoice" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Invoice_by_InvoiceId_response" + } + }, + { + "name": "v2_delete_MediaType_by_MediaTypeId", + "description": "Delete any row on the 'MediaType' collection using the 'MediaTypeId' key", + "arguments": { + "key_MediaTypeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'MediaType' collection", + "type": { + "type": "predicate", + "object_type_name": "MediaType" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_MediaType_by_MediaTypeId_response" + } + }, + { + "name": "v2_delete_PlaylistTrack_by_PlaylistId_and_TrackId", + "description": "Delete any row on the 'PlaylistTrack' collection using the 'PlaylistId' and 'TrackId' keys", + "arguments": { + "key_PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "key_TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'PlaylistTrack' collection", + "type": { + "type": "predicate", + "object_type_name": "PlaylistTrack" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_PlaylistTrack_by_PlaylistId_and_TrackId_response" + } + }, + { + "name": "v2_delete_Playlist_by_PlaylistId", + "description": "Delete any row on the 'Playlist' collection using the 'PlaylistId' key", + "arguments": { + "key_PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Playlist' collection", + "type": { + "type": "predicate", + "object_type_name": "Playlist" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Playlist_by_PlaylistId_response" + } + }, + { + "name": "v2_delete_Track_by_TrackId", + "description": "Delete any row on the 'Track' collection using the 'TrackId' key", + "arguments": { + "key_TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'Track' collection", + "type": { + "type": "predicate", + "object_type_name": "Track" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_Track_by_TrackId_response" + } + }, + { + "name": "v2_delete_article_by_id", + "description": "Delete any row on the 'article' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'article' collection", + "type": { + "type": "predicate", + "object_type_name": "article" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_article_by_id_response" + } + }, + { + "name": "v2_delete_author_by_id", + "description": "Delete any row on the 'author' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'author' collection", + "type": { + "type": "predicate", + "object_type_name": "author" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_author_by_id_response" + } + }, + { + "name": "v2_delete_institution_by_id", + "description": "Delete any row on the 'institution' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'institution' collection", + "type": { + "type": "predicate", + "object_type_name": "institution" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_institution_by_id_response" + } + }, + { + "name": "v2_delete_movie_analytics_by_id", + "description": "Delete any row on the 'movie_analytics' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'movie_analytics' collection", + "type": { + "type": "predicate", + "object_type_name": "movie_analytics" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_movie_analytics_by_id_response" + } + }, + { + "name": "v2_delete_spatial_ref_sys_by_srid", + "description": "Delete any row on the 'spatial_ref_sys' collection using the 'srid' key", + "arguments": { + "key_srid": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'spatial_ref_sys' collection", + "type": { + "type": "predicate", + "object_type_name": "spatial_ref_sys" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_spatial_ref_sys_by_srid_response" + } + }, + { + "name": "v2_delete_topology_layer_by_feature_column_and_schema_name_and_table_name", + "description": "Delete any row on the 'topology_layer' collection using the 'feature_column', 'schema_name' and 'table_name' keys", + "arguments": { + "key_feature_column": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "key_schema_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "key_table_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_topology_layer_by_feature_column_and_schema_name_and_table_name_response" + } + }, + { + "name": "v2_delete_topology_layer_by_layer_id_and_topology_id", + "description": "Delete any row on the 'topology_layer' collection using the 'layer_id' and 'topology_id' keys", + "arguments": { + "key_layer_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "key_topology_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_topology_layer_by_layer_id_and_topology_id_response" + } + }, + { + "name": "v2_delete_topology_topology_by_id", + "description": "Delete any row on the 'topology_topology' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_topology_topology_by_id_response" + } + }, + { + "name": "v2_delete_topology_topology_by_name", + "description": "Delete any row on the 'topology_topology' collection using the 'name' key", + "arguments": { + "key_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "pre_check": { + "description": "Delete permission predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_delete_topology_topology_by_name_response" + } + }, + { + "name": "v2_insert_Album", + "description": "Insert into the Album table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Album_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Album' collection", + "type": { + "type": "predicate", + "object_type_name": "Album" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Album_response" + } + }, + { + "name": "v2_insert_Artist", + "description": "Insert into the Artist table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Artist_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Artist' collection", + "type": { + "type": "predicate", + "object_type_name": "Artist" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Artist_response" + } + }, + { + "name": "v2_insert_Customer", + "description": "Insert into the Customer table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Customer_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Customer' collection", + "type": { + "type": "predicate", + "object_type_name": "Customer" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Customer_response" + } + }, + { + "name": "v2_insert_Employee", + "description": "Insert into the Employee table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Employee_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Employee' collection", + "type": { + "type": "predicate", + "object_type_name": "Employee" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Employee_response" + } + }, + { + "name": "v2_insert_Genre", + "description": "Insert into the Genre table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Genre_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Genre' collection", + "type": { + "type": "predicate", + "object_type_name": "Genre" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Genre_response" + } + }, + { + "name": "v2_insert_Invoice", + "description": "Insert into the Invoice table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Invoice_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Invoice' collection", + "type": { + "type": "predicate", + "object_type_name": "Invoice" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Invoice_response" + } + }, + { + "name": "v2_insert_InvoiceLine", + "description": "Insert into the InvoiceLine table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_InvoiceLine_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'InvoiceLine' collection", + "type": { + "type": "predicate", + "object_type_name": "InvoiceLine" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_InvoiceLine_response" + } + }, + { + "name": "v2_insert_MediaType", + "description": "Insert into the MediaType table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_MediaType_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'MediaType' collection", + "type": { + "type": "predicate", + "object_type_name": "MediaType" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_MediaType_response" + } + }, + { + "name": "v2_insert_Playlist", + "description": "Insert into the Playlist table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Playlist_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Playlist' collection", + "type": { + "type": "predicate", + "object_type_name": "Playlist" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Playlist_response" + } + }, + { + "name": "v2_insert_PlaylistTrack", + "description": "Insert into the PlaylistTrack table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_PlaylistTrack_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'PlaylistTrack' collection", + "type": { + "type": "predicate", + "object_type_name": "PlaylistTrack" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_PlaylistTrack_response" + } + }, + { + "name": "v2_insert_Track", + "description": "Insert into the Track table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_Track_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'Track' collection", + "type": { + "type": "predicate", + "object_type_name": "Track" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_Track_response" + } + }, + { + "name": "v2_insert_article", + "description": "Insert into the article table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_article_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'article' collection", + "type": { + "type": "predicate", + "object_type_name": "article" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_article_response" + } + }, + { + "name": "v2_insert_author", + "description": "Insert into the author table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_author_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'author' collection", + "type": { + "type": "predicate", + "object_type_name": "author" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_author_response" + } + }, + { + "name": "v2_insert_institution", + "description": "Insert into the institution table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_institution_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'institution' collection", + "type": { + "type": "predicate", + "object_type_name": "institution" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_institution_response" + } + }, + { + "name": "v2_insert_movie_analytics", + "description": "Insert into the movie_analytics table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_movie_analytics_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'movie_analytics' collection", + "type": { + "type": "predicate", + "object_type_name": "movie_analytics" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_movie_analytics_response" + } + }, + { + "name": "v2_insert_spatial_ref_sys", + "description": "Insert into the spatial_ref_sys table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_spatial_ref_sys_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'spatial_ref_sys' collection", + "type": { + "type": "predicate", + "object_type_name": "spatial_ref_sys" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_spatial_ref_sys_response" + } + }, + { + "name": "v2_insert_topology_layer", + "description": "Insert into the topology_layer table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_topology_layer_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_topology_layer_response" + } + }, + { + "name": "v2_insert_topology_topology", + "description": "Insert into the topology_topology table", + "arguments": { + "objects": { + "type": { + "type": "array", + "element_type": { + "type": "named", + "name": "v2_insert_topology_topology_object" + } + } + }, + "post_check": { + "description": "Insert permission predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_insert_topology_topology_response" + } + }, + { + "name": "v2_update_Album_by_AlbumId", + "description": "Update any row on the 'Album' collection using the 'AlbumId' key", + "arguments": { + "key_AlbumId": { + "description": "The identifier of an album", + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Album' collection", + "type": { + "type": "predicate", + "object_type_name": "Album" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Album' collection", + "type": { + "type": "predicate", + "object_type_name": "Album" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Album_by_AlbumId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Album_by_AlbumId_response" + } + }, + { + "name": "v2_update_Artist_by_ArtistId", + "description": "Update any row on the 'Artist' collection using the 'ArtistId' key", + "arguments": { + "key_ArtistId": { + "description": "The identifier of an artist", + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Artist' collection", + "type": { + "type": "predicate", + "object_type_name": "Artist" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Artist' collection", + "type": { + "type": "predicate", + "object_type_name": "Artist" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Artist_by_ArtistId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Artist_by_ArtistId_response" + } + }, + { + "name": "v2_update_Customer_by_CustomerId", + "description": "Update any row on the 'Customer' collection using the 'CustomerId' key", + "arguments": { + "key_CustomerId": { + "description": "The identifier of customer", + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Customer' collection", + "type": { + "type": "predicate", + "object_type_name": "Customer" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Customer' collection", + "type": { + "type": "predicate", + "object_type_name": "Customer" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Customer_by_CustomerId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Customer_by_CustomerId_response" + } + }, + { + "name": "v2_update_Employee_by_EmployeeId", + "description": "Update any row on the 'Employee' collection using the 'EmployeeId' key", + "arguments": { + "key_EmployeeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Employee' collection", + "type": { + "type": "predicate", + "object_type_name": "Employee" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Employee' collection", + "type": { + "type": "predicate", + "object_type_name": "Employee" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Employee_by_EmployeeId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Employee_by_EmployeeId_response" + } + }, + { + "name": "v2_update_Genre_by_GenreId", + "description": "Update any row on the 'Genre' collection using the 'GenreId' key", + "arguments": { + "key_GenreId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Genre' collection", + "type": { + "type": "predicate", + "object_type_name": "Genre" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Genre' collection", + "type": { + "type": "predicate", + "object_type_name": "Genre" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Genre_by_GenreId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Genre_by_GenreId_response" + } + }, + { + "name": "v2_update_InvoiceLine_by_InvoiceLineId", + "description": "Update any row on the 'InvoiceLine' collection using the 'InvoiceLineId' key", + "arguments": { + "key_InvoiceLineId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'InvoiceLine' collection", + "type": { + "type": "predicate", + "object_type_name": "InvoiceLine" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'InvoiceLine' collection", + "type": { + "type": "predicate", + "object_type_name": "InvoiceLine" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_InvoiceLine_by_InvoiceLineId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_InvoiceLine_by_InvoiceLineId_response" + } + }, + { + "name": "v2_update_Invoice_by_InvoiceId", + "description": "Update any row on the 'Invoice' collection using the 'InvoiceId' key", + "arguments": { + "key_InvoiceId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Invoice' collection", + "type": { + "type": "predicate", + "object_type_name": "Invoice" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Invoice' collection", + "type": { + "type": "predicate", + "object_type_name": "Invoice" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Invoice_by_InvoiceId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Invoice_by_InvoiceId_response" + } + }, + { + "name": "v2_update_MediaType_by_MediaTypeId", + "description": "Update any row on the 'MediaType' collection using the 'MediaTypeId' key", + "arguments": { + "key_MediaTypeId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'MediaType' collection", + "type": { + "type": "predicate", + "object_type_name": "MediaType" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'MediaType' collection", + "type": { + "type": "predicate", + "object_type_name": "MediaType" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_MediaType_by_MediaTypeId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_MediaType_by_MediaTypeId_response" + } + }, + { + "name": "v2_update_PlaylistTrack_by_PlaylistId_and_TrackId", + "description": "Update any row on the 'PlaylistTrack' collection using the 'PlaylistId' and 'TrackId' keys", + "arguments": { + "key_PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "key_TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'PlaylistTrack' collection", + "type": { + "type": "predicate", + "object_type_name": "PlaylistTrack" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'PlaylistTrack' collection", + "type": { + "type": "predicate", + "object_type_name": "PlaylistTrack" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_PlaylistTrack_by_PlaylistId_and_TrackId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_PlaylistTrack_by_PlaylistId_and_TrackId_response" + } + }, + { + "name": "v2_update_Playlist_by_PlaylistId", + "description": "Update any row on the 'Playlist' collection using the 'PlaylistId' key", + "arguments": { + "key_PlaylistId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Playlist' collection", + "type": { + "type": "predicate", + "object_type_name": "Playlist" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Playlist' collection", + "type": { + "type": "predicate", + "object_type_name": "Playlist" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Playlist_by_PlaylistId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Playlist_by_PlaylistId_response" + } + }, + { + "name": "v2_update_Track_by_TrackId", + "description": "Update any row on the 'Track' collection using the 'TrackId' key", + "arguments": { + "key_TrackId": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'Track' collection", + "type": { + "type": "predicate", + "object_type_name": "Track" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'Track' collection", + "type": { + "type": "predicate", + "object_type_name": "Track" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_Track_by_TrackId_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_Track_by_TrackId_response" + } + }, + { + "name": "v2_update_article_by_id", + "description": "Update any row on the 'article' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'article' collection", + "type": { + "type": "predicate", + "object_type_name": "article" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'article' collection", + "type": { + "type": "predicate", + "object_type_name": "article" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_article_by_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_article_by_id_response" + } + }, + { + "name": "v2_update_author_by_id", + "description": "Update any row on the 'author' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'author' collection", + "type": { + "type": "predicate", + "object_type_name": "author" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'author' collection", + "type": { + "type": "predicate", + "object_type_name": "author" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_author_by_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_author_by_id_response" + } + }, + { + "name": "v2_update_institution_by_id", + "description": "Update any row on the 'institution' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'institution' collection", + "type": { + "type": "predicate", + "object_type_name": "institution" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'institution' collection", + "type": { + "type": "predicate", + "object_type_name": "institution" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_institution_by_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_institution_by_id_response" + } + }, + { + "name": "v2_update_movie_analytics_by_id", + "description": "Update any row on the 'movie_analytics' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'movie_analytics' collection", + "type": { + "type": "predicate", + "object_type_name": "movie_analytics" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'movie_analytics' collection", + "type": { + "type": "predicate", + "object_type_name": "movie_analytics" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_movie_analytics_by_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_movie_analytics_by_id_response" + } + }, + { + "name": "v2_update_spatial_ref_sys_by_srid", + "description": "Update any row on the 'spatial_ref_sys' collection using the 'srid' key", + "arguments": { + "key_srid": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'spatial_ref_sys' collection", + "type": { + "type": "predicate", + "object_type_name": "spatial_ref_sys" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'spatial_ref_sys' collection", + "type": { + "type": "predicate", + "object_type_name": "spatial_ref_sys" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_spatial_ref_sys_by_srid_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_spatial_ref_sys_by_srid_response" + } + }, + { + "name": "v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name", + "description": "Update any row on the 'topology_layer' collection using the 'feature_column', 'schema_name' and 'table_name' keys", + "arguments": { + "key_feature_column": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "key_schema_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "key_table_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_topology_layer_by_feature_column_and_schema_name_and_table_name_response" + } + }, + { + "name": "v2_update_topology_layer_by_layer_id_and_topology_id", + "description": "Update any row on the 'topology_layer' collection using the 'layer_id' and 'topology_id' keys", + "arguments": { + "key_layer_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "key_topology_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'topology_layer' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_layer" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_topology_layer_by_layer_id_and_topology_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_topology_layer_by_layer_id_and_topology_id_response" + } + }, + { + "name": "v2_update_topology_topology_by_id", + "description": "Update any row on the 'topology_topology' collection using the 'id' key", + "arguments": { + "key_id": { + "type": { + "type": "named", + "name": "int4" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_topology_topology_by_id_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_topology_topology_by_id_response" + } + }, + { + "name": "v2_update_topology_topology_by_name", + "description": "Update any row on the 'topology_topology' collection using the 'name' key", + "arguments": { + "key_name": { + "type": { + "type": "named", + "name": "varchar" + } + }, + "post_check": { + "description": "Update permission post-condition predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + }, + "pre_check": { + "description": "Update permission pre-condition predicate over the 'topology_topology' collection", + "type": { + "type": "predicate", + "object_type_name": "topology_topology" + } + }, + "update_columns": { + "type": { + "type": "named", + "name": "v2_update_topology_topology_by_name_update_columns" + } + } + }, + "result_type": { + "type": "named", + "name": "v2_update_topology_topology_by_name_response" } } ] }, "capabilities": { - "version": "0.1.3", + "version": "0.1.6", "capabilities": { "query": { "aggregates": {}, - "explain": {}, "variables": {}, + "explain": {}, "nested_fields": { "filter_by": {}, "order_by": {} + }, + "exists": { + "nested_collections": {} } }, - "mutation": {}, + "mutation": { + "transactional": {}, + "explain": {} + }, "relationships": { "relation_comparisons": {}, "order_by_aggregate": {} @@ -1889,6 +10405,18 @@ } } }, + { + "kind": "DataConnectorScalarRepresentation", + "version": "v1", + "definition": { + "dataConnectorName": "db", + "dataConnectorScalarType": "text", + "representation": "String", + "graphql": { + "comparisonExpressionTypeName": "textComparisonExp" + } + } + }, { "kind": "DataConnectorScalarRepresentation", "version": "v1", @@ -1962,60 +10490,475 @@ } }, { - "kind": "ObjectBooleanExpressionType", + "kind": "BooleanExpressionType", "version": "v1", "definition": { "name": "artist_bool_exp", - "objectType": "Artist", - "dataConnectorName": "db", - "dataConnectorObjectType": "Artist", - "comparableFields": [ - { - "fieldName": "ArtistId", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "Name", - "operators": { - "enableAll": true - } + "operand": { + "object": { + "type": "Artist", + "comparableFields": [ + { + "fieldName": "ArtistId", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "Name", + "booleanExpressionType": "varchar_bool_exp" + } + ], + "comparableRelationships": [] } - ], + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": false + }, "graphql": { "typeName": "ArtistBoolExp" } } }, { - "kind": "ObjectBooleanExpressionType", + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "varchar_bool_exp", + "operand": { + "scalar": { + "type": "varchar", + "comparisonOperators": [ + { + "name": "_eq", + "argumentType": "varchar!" + }, + { + "name": "_gt", + "argumentType": "varchar!" + }, + { + "name": "_gte", + "argumentType": "varchar!" + }, + { + "name": "_ilike", + "argumentType": "varchar!" + }, + { + "name": "_in", + "argumentType": "[varchar!]!" + }, + { + "name": "_iregex", + "argumentType": "varchar!" + }, + { + "name": "_like", + "argumentType": "varchar!" + }, + { + "name": "_lt", + "argumentType": "varchar!" + }, + { + "name": "_lte", + "argumentType": "varchar!" + }, + { + "name": "_neq", + "argumentType": "varchar!" + }, + { + "name": "_nilike", + "argumentType": "varchar!" + }, + { + "name": "_niregex", + "argumentType": "varchar!" + }, + { + "name": "_nlike", + "argumentType": "varchar!" + }, + { + "name": "_nregex", + "argumentType": "varchar!" + }, + { + "name": "_regex", + "argumentType": "varchar!" + }, + { + "name": "st_coveredby", + "argumentType": "varchar!" + }, + { + "name": "st_covers", + "argumentType": "varchar!" + }, + { + "name": "st_intersects", + "argumentType": "varchar!" + }, + { + "name": "st_relatematch", + "argumentType": "varchar!" + }, + { + "name": "starts_with", + "argumentType": "varchar!" + }, + { + "name": "ts_match_tt", + "argumentType": "varchar!" + } + ], + "dataConnectorOperatorMapping": [ + { + "dataConnectorName": "db", + "dataConnectorScalarType": "varchar", + "operatorMapping": {} + } + ] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "varchar_bool_exp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "String_bool_exp", + "operand": { + "scalar": { + "type": "String", + "comparisonOperators": [ + { + "name": "_eq", + "argumentType": "String!" + }, + { + "name": "_gt", + "argumentType": "String!" + }, + { + "name": "_gte", + "argumentType": "String!" + }, + { + "name": "_ilike", + "argumentType": "String!" + }, + { + "name": "_in", + "argumentType": "[String!]!" + }, + { + "name": "_iregex", + "argumentType": "String!" + }, + { + "name": "_like", + "argumentType": "String!" + }, + { + "name": "_lt", + "argumentType": "String!" + }, + { + "name": "_lte", + "argumentType": "String!" + }, + { + "name": "_neq", + "argumentType": "String!" + }, + { + "name": "_nilike", + "argumentType": "String!" + }, + { + "name": "_niregex", + "argumentType": "String!" + }, + { + "name": "_nlike", + "argumentType": "String!" + }, + { + "name": "_nregex", + "argumentType": "String!" + }, + { + "name": "_regex", + "argumentType": "String!" + }, + { + "name": "st_coveredby", + "argumentType": "String!" + }, + { + "name": "st_covers", + "argumentType": "String!" + }, + { + "name": "st_intersects", + "argumentType": "String!" + }, + { + "name": "st_relatematch", + "argumentType": "String!" + }, + { + "name": "starts_with", + "argumentType": "String!" + }, + { + "name": "ts_match_tt", + "argumentType": "String!" + } + ], + "dataConnectorOperatorMapping": [ + { + "dataConnectorName": "db", + "dataConnectorScalarType": "text", + "operatorMapping": {} + } + ] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "String_bool_exp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "int4_bool_exp", + "operand": { + "scalar": { + "type": "int4", + "comparisonOperators": [ + { + "name": "_eq", + "argumentType": "int4!" + }, + { + "name": "_gt", + "argumentType": "int4!" + }, + { + "name": "_gte", + "argumentType": "int4!" + }, + { + "name": "_in", + "argumentType": "[int4!]!" + }, + { + "name": "_lt", + "argumentType": "int4!" + }, + { + "name": "_lte", + "argumentType": "int4!" + }, + { + "name": "_neq", + "argumentType": "int4!" + } + ], + "dataConnectorOperatorMapping": [ + { + "dataConnectorName": "db", + "dataConnectorScalarType": "int4", + "operatorMapping": {} + } + ] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "int4_bool_exp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Int_bool_exp", + "operand": { + "scalar": { + "type": "Int", + "comparisonOperators": [ + { + "name": "_eq", + "argumentType": "Int!" + }, + { + "name": "_gt", + "argumentType": "Int!" + }, + { + "name": "_gte", + "argumentType": "Int!" + }, + { + "name": "_in", + "argumentType": "[Int!]!" + }, + { + "name": "_lt", + "argumentType": "Int!" + }, + { + "name": "_lte", + "argumentType": "Int!" + }, + { + "name": "_neq", + "argumentType": "Int!" + } + ], + "dataConnectorOperatorMapping": [ + { + "dataConnectorName": "db", + "dataConnectorScalarType": "int4", + "operatorMapping": {} + } + ] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "Int_bool_exp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "CustomInt_bool_exp", + "operand": { + "scalar": { + "type": "CustomInt", + "comparisonOperators": [ + { + "name": "_eq", + "argumentType": "CustomInt!" + }, + { + "name": "_gt", + "argumentType": "CustomInt!" + }, + { + "name": "_gte", + "argumentType": "CustomInt!" + }, + { + "name": "_in", + "argumentType": "[CustomInt!]!" + }, + { + "name": "_lt", + "argumentType": "CustomInt!" + }, + { + "name": "_lte", + "argumentType": "CustomInt!" + }, + { + "name": "_neq", + "argumentType": "CustomInt!" + } + ], + "dataConnectorOperatorMapping": [ + { + "dataConnectorName": "db", + "dataConnectorScalarType": "int8", + "operatorMapping": {} + } + ] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "CustomInt_bool_exp" + } + } + }, + { + "kind": "BooleanExpressionType", "version": "v1", "definition": { "name": "album_bool_exp", - "objectType": "Album", - "dataConnectorName": "db", - "dataConnectorObjectType": "Album", - "comparableFields": [ - { - "fieldName": "AlbumId", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "ArtistId", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "Title", - "operators": { - "enableAll": true - } + "operand": { + "object": { + "type": "Album", + "comparableFields": [ + { + "fieldName": "AlbumId", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "ArtistId", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "Title", + "booleanExpressionType": "varchar_bool_exp" + } + ], + "comparableRelationships": [ + { + "relationshipName": "Artist", + "booleanExpressionType": "artist_bool_exp" + } + ] } - ], + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": false + }, "graphql": { "typeName": "AlbumBoolExp" } @@ -2085,33 +11028,41 @@ } }, { - "kind": "ObjectBooleanExpressionType", + "kind": "BooleanExpressionType", "version": "v1", "definition": { "name": "article_bool_exp", - "objectType": "article", - "dataConnectorName": "db", - "dataConnectorObjectType": "article", - "comparableFields": [ - { - "fieldName": "author_id", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "article_id", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "title", - "operators": { - "enableAll": true - } + "operand": { + "object": { + "type": "article", + "comparableFields": [ + { + "fieldName": "author_id", + "booleanExpressionType": "CustomInt_bool_exp" + }, + { + "fieldName": "article_id", + "booleanExpressionType": "Int_bool_exp" + }, + { + "fieldName": "title", + "booleanExpressionType": "String_bool_exp" + } + ], + "comparableRelationships": [ + { + "relationshipName": "Author", + "booleanExpressionType": "author_bool_exp" + } + ] } - ], + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": false + }, "graphql": { "typeName": "Article_Where_Exp" } @@ -2195,33 +11146,36 @@ } }, { - "kind": "ObjectBooleanExpressionType", + "kind": "BooleanExpressionType", "version": "v1", "definition": { "name": "author_bool_exp", - "objectType": "author", - "dataConnectorName": "db", - "dataConnectorObjectType": "author", - "comparableFields": [ - { - "fieldName": "author_id", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "first_name", - "operators": { - "enableAll": true - } - }, - { - "fieldName": "last_name", - "operators": { - "enableAll": true - } + "operand": { + "object": { + "type": "author", + "comparableFields": [ + { + "fieldName": "author_id", + "booleanExpressionType": "CustomInt_bool_exp" + }, + { + "fieldName": "first_name", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "last_name", + "booleanExpressionType": "String_bool_exp" + } + ], + "comparableRelationships": [] } - ], + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": false + }, "graphql": { "typeName": "Author_Where_Exp" } @@ -4867,75 +13821,6 @@ ] } }, - { - "kind": "ObjectType", - "version": "v1", - "definition": { - "name": "commandArticle", - "description": "commandArticle description", - "fields": [ - { - "name": "article_id", - "type": "Int!" - }, - { - "name": "title", - "type": "String!" - }, - { - "name": "author_id", - "type": "Int!" - } - ], - "graphql": { - "typeName": "CommandArticle" - }, - "dataConnectorTypeMapping": [ - { - "dataConnectorName": "db", - "dataConnectorObjectType": "article", - "fieldMapping": { - "article_id": { - "column": { - "name": "id" - } - }, - "title": { - "column": { - "name": "title" - } - }, - "author_id": { - "column": { - "name": "author_id" - } - } - } - } - ] - } - }, - { - "kind": "TypePermissions", - "version": "v1", - "definition": { - "typeName": "commandArticle", - "permissions": [ - { - "role": "admin", - "output": { - "allowedFields": ["article_id", "title", "author_id"] - } - }, - { - "role": "user", - "output": { - "allowedFields": ["article_id", "title", "author_id"] - } - } - ] - } - }, { "kind": "ObjectType", "version": "v1", @@ -5005,201 +13890,634 @@ } }, { - "kind": "CommandPermissions", + "kind": "Model", "version": "v1", "definition": { - "commandName": "get_article_by_id", - "permissions": [ + "name": "Institution", + "objectType": "Institution", + "source": { + "dataConnectorName": "db", + "collection": "institution" + }, + "filterExpressionType": "Institution_bool_exp", + "orderableFields": [ { - "role": "admin", - "allowExecution": true + "fieldName": "departments", + "orderByDirections": { + "enableAll": true + } }, { - "role": "user", - "allowExecution": true - } - ] - } - }, - { - "kind": "Command", - "version": "v1", - "definition": { - "name": "get_article_by_id", - "description": "get_article_by_id description", - "arguments": [ + "fieldName": "id", + "orderByDirections": { + "enableAll": true + } + }, { - "name": "article_id", - "type": "Int!", - "description": "command argument description" + "fieldName": "location", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "name", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "songs", + "orderByDirections": { + "enableAll": true + } + }, + { + "fieldName": "staff", + "orderByDirections": { + "enableAll": true + } } ], - "outputType": "commandArticle", - "source": { - "dataConnectorName": "db", - "dataConnectorCommand": { - "function": "get_article_by_id" - }, - "argumentMapping": { - "article_id": "id" - } - }, "graphql": { - "rootFieldName": "getArticleById", - "rootFieldKind": "Query" + "selectMany": { + "queryRootField": "Institution" + }, + "selectUniques": [ + { + "queryRootField": "InstitutionById", + "uniqueIdentifier": ["id"] + } + ], + "orderByExpressionType": "Institution_order_by", + "aggregate": { + "queryRootField": "InstitutionAggregate" + } } } }, { - "kind": "CommandPermissions", + "kind": "ModelPermissions", "version": "v1", "definition": { - "commandName": "get_author_by_id", + "modelName": "Institution", "permissions": [ { "role": "admin", - "allowExecution": true - }, - { - "role": "user", - "allowExecution": true + "select": { + "filter": null + } } ] } }, { - "kind": "Command", + "kind": "ObjectType", "version": "v1", "definition": { - "name": "get_author_by_id", - "arguments": [ + "name": "Institution", + "fields": [ { - "name": "author_id", - "type": "Int!" + "name": "departments", + "type": "[String]" + }, + { + "name": "id", + "type": "int4!" + }, + { + "name": "location", + "type": "Location" + }, + { + "name": "name", + "type": "String" + }, + { + "name": "songs", + "type": "InstitutionSongs" + }, + { + "name": "staff", + "type": "[Staff]" } ], - "outputType": "commandAuthor", - "source": { - "dataConnectorName": "db", - "dataConnectorCommand": { - "function": "get_author_by_id" - }, - "argumentMapping": { - "author_id": "id" - } - }, "graphql": { - "rootFieldName": "getAuthorById", - "rootFieldKind": "Query" - } - } - }, - { - "kind": "CommandPermissions", - "version": "v1", - "definition": { - "commandName": "get_latest_article", - "permissions": [ + "typeName": "Institution", + "inputTypeName": "InstitutionInput" + }, + "dataConnectorTypeMapping": [ { - "role": "admin", - "allowExecution": true + "dataConnectorName": "db", + "dataConnectorObjectType": "institution" } ] } }, { - "kind": "Command", + "kind": "TypePermissions", "version": "v1", "definition": { - "name": "get_latest_article", - "arguments": [], - "outputType": "commandArticle", - "source": { - "dataConnectorName": "db", - "dataConnectorCommand": { - "function": "latest_article" - } - }, - "graphql": { - "rootFieldName": "getLatestArticle", - "rootFieldKind": "Query" - } - } - }, - { - "kind": "CommandPermissions", - "version": "v1", - "definition": { - "commandName": "get_latest_article_id", + "typeName": "Institution", "permissions": [ { "role": "admin", - "allowExecution": true + "output": { + "allowedFields": [ + "departments", + "id", + "location", + "name", + "songs", + "staff" + ] + } } ] } }, { - "kind": "Command", + "kind": "ObjectType", "version": "v1", "definition": { - "name": "get_latest_article_id", - "arguments": [], - "outputType": "Int", - "source": { - "dataConnectorName": "db", - "dataConnectorCommand": { - "function": "latest_article_id" - } - }, - "graphql": { - "rootFieldName": "getLatestArticleId", - "rootFieldKind": "Query" - } - } - }, - { - "kind": "CommandPermissions", - "version": "v1", - "definition": { - "commandName": "update_article_title_by_id", - "permissions": [ + "name": "Location", + "fields": [ { - "role": "admin", - "allowExecution": true - } - ] - } - }, - { - "kind": "Command", - "version": "v1", - "definition": { - "name": "update_article_title_by_id", - "arguments": [ - { - "name": "article_id", - "type": "Int!" + "name": "campuses", + "type": "[String]" }, { - "name": "title", - "type": "String!" + "name": "city", + "type": "String" + }, + { + "name": "country", + "type": "Country" } ], - "outputType": "commandArticle", - "source": { - "dataConnectorName": "db", - "dataConnectorCommand": { - "procedure": "update_article_title_by_id" + "graphql": { + "typeName": "Location", + "inputTypeName": "LocationInput" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "location" + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "Location", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": ["campuses", "city", "country"] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "Country", + "fields": [ + { + "name": "continent", + "type": "String" }, - "argumentMapping": { - "article_id": "id", - "title": "title" + { + "name": "name", + "type": "String" + } + ], + "graphql": { + "typeName": "Country", + "inputTypeName": "CountryInput" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "country" + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "Country", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": ["continent", "name"] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "InstitutionSongs", + "fields": [ + { + "name": "primaryAnthemTrackId", + "type": "int4" + }, + { + "name": "secondaryAnthemTrackId", + "type": "int4" + } + ], + "graphql": { + "typeName": "InstitutionSongs", + "inputTypeName": "InstitutionSongsInput" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "institution_songs", + "fieldMapping": { + "primaryAnthemTrackId": { + "column": { + "name": "primary_anthem_track_id" + } + }, + "secondaryAnthemTrackId": { + "column": { + "name": "secondary_anthem_track_id" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "InstitutionSongs", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": [ + "primaryAnthemTrackId", + "secondaryAnthemTrackId" + ] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "Staff", + "fields": [ + { + "name": "favouriteArtistId", + "type": "int4" + }, + { + "name": "firstName", + "type": "String" + }, + { + "name": "lastName", + "type": "String" + }, + { + "name": "pets", + "type": "[Pet]" + }, + { + "name": "specialities", + "type": "[String]" + } + ], + "graphql": { + "typeName": "Staff", + "inputTypeName": "StaffInput" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "staff", + "fieldMapping": { + "favouriteArtistId": { + "column": { + "name": "favourite_artist_id" + } + }, + "firstName": { + "column": { + "name": "first_name" + } + }, + "lastName": { + "column": { + "name": "last_name" + } + }, + "pets": { + "column": { + "name": "pets" + } + }, + "specialities": { + "column": { + "name": "specialities" + } + } + } + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "Staff", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": [ + "favouriteArtistId", + "firstName", + "lastName", + "pets", + "specialities" + ] + } + } + ] + } + }, + { + "kind": "ObjectType", + "version": "v1", + "definition": { + "name": "Pet", + "fields": [ + { + "name": "age", + "type": "int4" + }, + { + "name": "name", + "type": "String" + } + ], + "graphql": { + "typeName": "Pet", + "inputTypeName": "PetInput" + }, + "dataConnectorTypeMapping": [ + { + "dataConnectorName": "db", + "dataConnectorObjectType": "pet" + } + ] + } + }, + { + "kind": "TypePermissions", + "version": "v1", + "definition": { + "typeName": "Pet", + "permissions": [ + { + "role": "admin", + "output": { + "allowedFields": ["age", "name"] + } + } + ] + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Institution_bool_exp", + "operand": { + "object": { + "type": "Institution", + "comparableFields": [ + { + "fieldName": "id", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "location", + "booleanExpressionType": "Location_bool_exp" + }, + { + "fieldName": "name", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "songs", + "booleanExpressionType": "InstitutionSongs_bool_exp" + }, + { + "fieldName": "staff", + "booleanExpressionType": "Staff_bool_exp" + } + ], + "comparableRelationships": [] } }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, "graphql": { - "rootFieldName": "updateArticleTitleById", - "rootFieldKind": "Mutation" + "typeName": "InstitutionBoolExp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Location_bool_exp", + "operand": { + "object": { + "type": "Location", + "comparableFields": [ + { + "fieldName": "city", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "country", + "booleanExpressionType": "Country_bool_exp" + } + ], + "comparableRelationships": [] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "LocationBoolExp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Country_bool_exp", + "operand": { + "object": { + "type": "Country", + "comparableFields": [ + { + "fieldName": "continent", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "name", + "booleanExpressionType": "String_bool_exp" + } + ], + "comparableRelationships": [] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "CountryBoolExp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "InstitutionSongs_bool_exp", + "operand": { + "object": { + "type": "InstitutionSongs", + "comparableFields": [ + { + "fieldName": "primaryAnthemTrackId", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "secondaryAnthemTrackId", + "booleanExpressionType": "int4_bool_exp" + } + ], + "comparableRelationships": [] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "InstitutionSongsBoolExp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Staff_bool_exp", + "operand": { + "object": { + "type": "Staff", + "comparableFields": [ + { + "fieldName": "favouriteArtistId", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "firstName", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "lastName", + "booleanExpressionType": "String_bool_exp" + }, + { + "fieldName": "pets", + "booleanExpressionType": "Pet_bool_exp" + } + ], + "comparableRelationships": [] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "StaffBoolExp" + } + } + }, + { + "kind": "BooleanExpressionType", + "version": "v1", + "definition": { + "name": "Pet_bool_exp", + "operand": { + "object": { + "type": "Pet", + "comparableFields": [ + { + "fieldName": "age", + "booleanExpressionType": "int4_bool_exp" + }, + { + "fieldName": "name", + "booleanExpressionType": "String_bool_exp" + } + ], + "comparableRelationships": [] + } + }, + "logicalOperators": { + "enable": true + }, + "isNull": { + "enable": true + }, + "graphql": { + "typeName": "PetBoolExp" } } }, @@ -5207,12 +14525,11 @@ "kind": "Relationship", "version": "v1", "definition": { - "sourceType": "commandArticle", - "name": "article", - "description": "commandArticle - article relationship description", + "sourceType": "InstitutionSongs", + "name": "primaryAnthemTrack", "target": { "model": { - "name": "Articles", + "name": "Track", "relationshipType": "Object" } }, @@ -5221,14 +14538,14 @@ "source": { "fieldPath": [ { - "fieldName": "article_id" + "fieldName": "primaryAnthemTrackId" } ] }, "target": { "modelField": [ { - "fieldName": "article_id" + "fieldName": "TrackId" } ] } @@ -5237,13 +14554,15 @@ } }, { + "kind": "Relationship", + "version": "v1", "definition": { - "sourceType": "article", - "name": "AuthorFromCommand", - "description": "AuthorFromCommand description", + "sourceType": "InstitutionSongs", + "name": "secondaryAnthemTrack", "target": { - "command": { - "name": "get_author_by_id" + "model": { + "name": "Track", + "relationshipType": "Object" } }, "mapping": [ @@ -5251,20 +14570,52 @@ "source": { "fieldPath": [ { - "fieldName": "author_id" + "fieldName": "secondaryAnthemTrackId" } ] }, "target": { - "argument": { - "argumentName": "author_id" - } + "modelField": [ + { + "fieldName": "TrackId" + } + ] } } ] - }, + } + }, + { + "kind": "Relationship", "version": "v1", - "kind": "Relationship" + "definition": { + "sourceType": "Staff", + "name": "favouriteArtist", + "target": { + "model": { + "name": "Artist", + "relationshipType": "Object" + } + }, + "mapping": [ + { + "source": { + "fieldPath": [ + { + "fieldName": "favouriteArtistId" + } + ] + }, + "target": { + "modelField": [ + { + "fieldName": "ArtistId" + } + ] + } + } + ] + } }, { "kind": "Relationship", @@ -6100,8 +15451,68 @@ } ] } + }, + { + "kind": "GraphqlConfig", + "version": "v1", + "definition": { + "query": { + "rootOperationTypeName": "Query", + "argumentsInput": { + "fieldName": "args" + }, + "limitInput": { + "fieldName": "limit" + }, + "offsetInput": { + "fieldName": "offset" + }, + "filterInput": { + "fieldName": "where", + "operatorNames": { + "and": "_and", + "or": "_or", + "not": "_not", + "isNull": "_is_null" + } + }, + "orderByInput": { + "fieldName": "order_by", + "enumDirectionValues": { + "asc": "Asc", + "desc": "Desc" + }, + "enumTypeNames": [ + { + "directions": ["Asc", "Desc"], + "typeName": "OrderByAscDesc" + } + ] + } + }, + "mutation": { + "rootOperationTypeName": "Mutation" + }, + "apolloFederation": { + "enableRootFields": true + } + } } ] } - ] + ], + "flags": { + "require_graphql_config": true, + "require_valid_ndc_v01_version": true, + "bypass_relation_comparisons_ndc_capability": true, + "require_nested_array_filtering_capability": true, + "disallow_scalar_type_names_conflicting_with_inbuilt_types": true, + "propagate_boolean_expression_deprecation_status": true, + "require_unique_command_graphql_names": true, + "allow_partial_supergraph": false, + "json_session_variables": true, + "disallow_array_field_compared_with_scalar_boolean_type": true, + "allow_boolean_expression_fields_without_graphql": true, + "require_unique_model_graphql_names": true + } }