函数的返回值可以用 Postgraphile 的特定名称命名吗?

Ουι*_*ευα 2 postgresql postgraphile

我在 PostgreSQL 中有这个函数:

CREATE FUNCTION it_exists(
  email text,
  name text
) RETURNS boolean AS $$
DECLARE
  _eva1 boolean;
  _eva2 boolean;
BEGIN
  _eva1 := EXISTS(SELECT * FROM tableA AS A WHERE A.email = $1::citext);
  _eva2 := EXISTS(SELECT * FROM tableB AS A WHERE A.name::citext = $2::citext);
  RETURN _eva1 OR _eva2;
END;
$$ LANGUAGE plpgsql STRICT SECURITY DEFINER;
Run Code Online (Sandbox Code Playgroud)

它被翻译成 Postgraphile 是这样的:

mutation MyMutation($email: String!, $name: String!) {
  itExists(
    input: { email: $email, name: $name }
  ) {
    boolean
  }
}
Run Code Online (Sandbox Code Playgroud)

我想将“布尔”名称更改为“结果”之类的名称,有什么建议吗?考虑我有许多具有不同返回值的函数。

Ber*_*rgi 5

我认为 Postgraphile 这样做是为了使其自定义突变遵循Relay 规范,该规范表示

按照惯例,突变被命名为动词,它们的输入是名称末尾附加“Input”的名称,它们返回一个对象,该对象是名称附加“Payload”的名称。

因此,您的自定义突变会创建一个ItExistsPayload仅包含单个字段的类型,而不是返回 GraphQL Boolean。将来您可能希望使用更多字段扩展此有效负载对象。

可以使用@resultFieldName智能标记重命名该字段。在你的情况下:

COMMENT ON FUNCTION it_exists(text, text) IS '@resultFieldName result';
Run Code Online (Sandbox Code Playgroud)