graphql-engine/server/tests-py/queries/graphql_introspection/remote_relationships/setup.yaml
Antoine Leblanc 81d9071948 Fix remote relationship invalid type name issue (fix hasura/graphql-engine#8002)
## Description

When setting up a remote relationship to a remote schema, values coming from the left-hand side are given as _arguments_ to the targeted field of the remote schema. In turn, that means we need to adjust the arguments to that remote field; in the case of input objects, it means creating a brand new input object in which the relevant fields have been removed.

To both avoid conflicts, and be explicit, we give a pretty verbose name to such an input object: its original name, followed by "remote_rel", followed by the full name of the field (table name + relationship name). The bug there was introduced when working on extending remote relationships to other backends: we changed the code that translates the table name to a graphql identifier to be generic, and use the table's `ToTxt` instance instead. However, when a table is not in the default schema, the character used by that instance is `.`, which is not a valid GraphQL name.

This PR fixes it, by doing two things:
- it defines a safe function to translate LHS identifiers to graphql names (by replacing all invalid characters by `_`)
- it doesn't use `unsafeMkName` anymore, and checks at validation time that the type name is correct

## Further work

On this PR:
- [x] add a test
- [x] write a Changelog entry

Beyond this PR, we might want to:
- prioritize #1747
- analyze all calls to `unsafeMkName` and remove as many as possible

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/3363
GitOrigin-RevId: fe98eb1d34157b2c8323af453f5c369de616af38
2022-01-27 14:34:01 +00:00

45 lines
846 B
YAML

type: bulk
args:
- type: run_sql
args:
sql: |
create schema custom;
create table custom.authors (
id serial primary key,
name text
);
insert into custom.authors (name) values
( 'alice' ),
( 'bob' ),
( 'carlos' ),
( 'david' ),
( 'emily' ),
( 'fiona' );
- type: track_table
args:
schema: custom
name: authors
- type: add_remote_schema
args:
name: my-remote-schema
definition:
url: http://localhost:4000
forward_client_headers: false
- type: create_remote_relationship
args:
name: userInfo
table: {schema: custom, name: authors}
hasura_fields:
- id
remote_schema: my-remote-schema
remote_field:
messages:
arguments:
where:
id:
eq: "$id"