我正在尝试测试一个空数组。我理解array_length
退回NULL
背后的原因,因为它是一个0维数组,但为什么array_ndims(array[]::int array)
不是0
,而是NULL
?
答案 0 :(得分:1)
看起来它永远不会返回0:
/* Sanity check: does it look like an array at all? */
if (AARR_NDIM(v) <= 0 || AARR_NDIM(v) > MAXDIM)
PG_RETURN_NULL();
您可以为此编写自己的C函数,只需将<= 0
更改为< 0
即可。至于背后的推理,我找不到任何东西。
来源是:https://www.postgresql.org/ftp/source/v10.1/(同样适用于9.6.2,最初是我检查的)
档案:./src/backend/utils/adt/arrayfuncs.c
寻找简单的10行函数:array_ndims