2017-12-29 16 views
1

空の配列をテストしようとしています。 array_lengthNULLの後ろの推論は0次元配列なので、私は理解していますが、なぜarray_ndims(array[]::int array)0ではなく、NULLですか?なぜ `array_ndims(array [])`はNULLを生成しますか?

/* Sanity check: does it look like an array at all? */ 
    if (AARR_NDIM(v) <= 0 || AARR_NDIM(v) > MAXDIM) 
     PG_RETURN_NULL(); 

あなたは単に< 0<= 0を変更、このために独自のC関数を書くことができます:それは0を返すことは決してありませんように

+0

のhttp:/ /www.postgresql-archive.org/array-ndims-never-returns-zero-td5998579.html @Lukaszの回答を受け入れてください - それは正しいもの(少なくとも今日)で、実際には(少なくとも今日は)正しく文書化されていません。 –

答えて

1

が見えます。これを裏づける理由は何も見つかりません。

出典である:(Iが最初にチェックするものであると、9.6.2のために同じもの)https://www.postgresql.org/ftp/source/v10.1/

ファイル:シンプル、10ライン機能のための./src/backend/utils/adt/arrayfuncs.c

ルック:array_ndims

+0

コードベースへのリンクを入れてください。空の配列の数がゼロになることも期待しています。たぶんsmbdは空の配列が配列であるかどうかをチェックするのを避けたいと思っていましたか? –

+0

@VaoTsun次元をもう一度計算すると(変数は変数を保持していません)、返すのはNULLを返すだけでなく、関数は0次元配列をチェックする必要がないと考えました。 –

+0

申し訳ありませんが、私はhttps://github.com/postgres/postgres/blob/master/src/backend/utils/adt/arrayfuncs.c#L1635 :) –

関連する問題