为什么 Postgraphile 的 <X> 连接类型在其节点列表中允许 NULL?

Why does Postgraphile's <X>Connection type allow NULLs in its nodes list?

如果我有 table X,为什么 XConnection 的 Postgraphile 生成的模式允许 returned 列表中的空值?

type XConnection { nodes: [X]! }

而不是

type XConnection { nodes: [X!]! }

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

为什么 allXs return XConnection(允许空列表)而不是 XConnection!?这里的 null 与空 [] 的意思相同吗?

谢谢!

原因是 create function x() returns setof my_table ... 函数可以 return 空值以及 table 行。在我看来,这样做是一种不好的做法。如果您同意,并且可以承诺不这样做,那么您可以使用 "no SETOF functions contain nulls" 标志来添加您询问的 missing 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 查询失败,或者数据库现在不可用)那么 entire GraphQL result 将为 null,而不仅仅是失败的字段。 GraphQL 擅长将故障限制在小范围内,因此 "nullable by default" 方法。