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

问题描述 投票:1回答:1

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

arrays postgresql
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.