220 lines
4.3 KiB
PL/PgSQL
220 lines
4.3 KiB
PL/PgSQL
begin;
|
|
comment on schema public is '@graphql({"inflect_names": true})';
|
|
|
|
create table account(
|
|
id serial primary key,
|
|
email varchar(255) not null,
|
|
priority int,
|
|
status text default 'active'
|
|
);
|
|
|
|
create table blog(
|
|
id serial primary key,
|
|
owner_id integer not null references account(id)
|
|
);
|
|
comment on table blog is e'@graphql({"totalCount": {"enabled": true}})';
|
|
|
|
-- Make sure functions still work
|
|
create function _echo_email(account)
|
|
returns text
|
|
language sql
|
|
as $$ select $1.email $$;
|
|
|
|
/*
|
|
Literals
|
|
*/
|
|
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoAccountCollection(objects: [
|
|
{ email: "foo@barsley.com", priority: 1 },
|
|
{ email: "bar@foosworth.com" }
|
|
]) {
|
|
affectedCount
|
|
records {
|
|
id
|
|
status
|
|
echoEmail
|
|
blogCollection {
|
|
totalCount
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$$);
|
|
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoBlogCollection(objects: [{
|
|
ownerId: 1
|
|
}]) {
|
|
records {
|
|
id
|
|
owner {
|
|
id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$$);
|
|
|
|
|
|
-- Override a default on status with null
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoAccountCollection(objects: [
|
|
{ email: "baz@baz.com", status: null },
|
|
]) {
|
|
affectedCount
|
|
records {
|
|
email
|
|
status
|
|
}
|
|
}
|
|
}
|
|
$$);
|
|
|
|
|
|
/*
|
|
Variables
|
|
*/
|
|
|
|
select graphql.resolve($$
|
|
mutation newAccount($emailAddress: String) {
|
|
xyz: insertIntoAccountCollection(objects: [
|
|
{ email: $emailAddress },
|
|
{ email: "other@email.com" }
|
|
]) {
|
|
affectedCount
|
|
records {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{"emailAddress": "foo@bar.com"}'::jsonb
|
|
);
|
|
|
|
|
|
-- Variable override of default with null results in null
|
|
select graphql.resolve($$
|
|
mutation newAccount($status: String) {
|
|
xyz: insertIntoAccountCollection(objects: [
|
|
{ email: "1@email.com", status: $status}
|
|
]) {
|
|
affectedCount
|
|
records {
|
|
email
|
|
status
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{"status": null}'::jsonb
|
|
);
|
|
|
|
-- Skipping variable override of default results in default
|
|
select graphql.resolve($$
|
|
mutation newAccount($status: String) {
|
|
xyz: insertIntoAccountCollection(objects: [
|
|
{ email: "x@y.com", status: $status},
|
|
]) {
|
|
affectedCount
|
|
records {
|
|
email
|
|
status
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{}'::jsonb
|
|
);
|
|
|
|
|
|
select graphql.resolve($$
|
|
mutation newAccount($acc: AccountInsertInput!) {
|
|
insertIntoAccountCollection(objects: [$acc]) {
|
|
affectedCount
|
|
records {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{"acc": {"email": "bar@foo.com"}}'::jsonb
|
|
);
|
|
|
|
select graphql.resolve($$
|
|
mutation newAccounts($acc: [AccountInsertInput!]!) {
|
|
insertIntoAccountCollection(objects: $accs) {
|
|
affectedCount
|
|
records {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{"accs": [{"email": "bar@foo.com"}]}'::jsonb
|
|
);
|
|
|
|
-- Single object coerces to a list
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoBlogCollection(objects: {ownerId: 1}) {
|
|
affectedCount
|
|
}
|
|
}
|
|
$$);
|
|
|
|
|
|
/*
|
|
Errors
|
|
*/
|
|
|
|
-- Field does not exist
|
|
select graphql.resolve($$
|
|
mutation createAccount($acc: AccountInsertInput) {
|
|
insertIntoAccountCollection(objects: [$acc]) {
|
|
affectedCount
|
|
records {
|
|
id
|
|
email
|
|
}
|
|
}
|
|
}
|
|
$$,
|
|
variables := '{"acc": {"doesNotExist": "other"}}'::jsonb
|
|
);
|
|
|
|
-- Wrong input type (list of string, not list of object)
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoBlogCollection(objects: ["not an object"]) {
|
|
affectedCount
|
|
}
|
|
}
|
|
$$);
|
|
|
|
-- objects argument is missing
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoBlogCollection {
|
|
affectedCount
|
|
}
|
|
}
|
|
$$);
|
|
|
|
-- Empty call
|
|
select graphql.resolve($$
|
|
mutation {
|
|
insertIntoBlogCollection(objects: []) {
|
|
affectedCount
|
|
}
|
|
}
|
|
$$);
|
|
|
|
rollback;
|