为什么`array_ndims(array [])`产生NULL?

时间:2017-12-29 12:39:26

标签: arrays postgresql

我正在尝试测试一个空数组。我理解array_length退回NULL背后的原因,因为它是一个0维数组,但为什么array_ndims(array[]::int array)不是0,而是NULL

1 个答案:

答案 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