为什么 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
的例子。这翻译成 Option
或 Maybe
类型的类型语言,这使得导航很麻烦,所以我想知道什么时候会是 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" 方法。
如果我有 table X
,为什么 XConnection
的 Postgraphile 生成的模式允许 returned 列表中的空值?
type XConnection { nodes: [X]! }
而不是
type XConnection { nodes: [X!]! }
我想不出 allXs
查询或与 X
的任何 1-N 关系在列表中有意义地使用 null
的例子。这翻译成 Option
或 Maybe
类型的类型语言,这使得导航很麻烦,所以我想知道什么时候会是 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" 方法。