0

如果我有桌子X,为什么 Postgraphile 生成的架构XConnection允许返回列表中的空值?

type XConnection { nodes: [X]! }

代替

type XConnection { nodes: [X!]! }

我想不出allXs查询或任何 1-N 关系 toXnull在列表中有意义使用的示例。这转化为OptionMaybe类型的类型语言,这使得导航很麻烦,所以我想知道它什么时候会是null.

为什么allXs返回一个XConnection(允许空列表)而不是XConnection!?anull这里的意思和 empty 一样[]吗?

谢谢!

4

1 回答 1

3

原因是create function x() returns setof my_table ...函数可以返回空值以及表行。在我看来,这样做是一种不好的做法。如果您同意并且可以承诺不这样做,那么您可以使用“没有 SETOF 函数包含空值”标志来添加您询问的缺失的 not null。

-N, --no-setof-functions-contain-nulls
if none of your RETURNS SETOF compound_type functions mix NULLs with the results 
then you may enable this to reduce the nullables in the GraphQL schema

(我是 PostGraphile 维护者,并添加了此选项。)

至于根级字段allXs;在 GraphQL 模式中,所有根级别字段都可以为空是一种很好的做法,因为如果它们不是并且一个根级别字段失败(例如 SQL 查询失败,或者数据库现在不可用),那么整个 GraphQL 结果将为空,而不是不仅仅是失败的领域。GraphQL 很擅长将故障限制在小范围内,因此采用了“默认为空”的方法。

于 2018-07-04T09:12:31.727 回答