2017-12-29 23 views
1

빈 배열을 테스트하려고합니다. 0- 차원 배열이기 때문에 array_lengthNULL의 이유를 이해합니다. 그러나 array_ndims(array[]::int array)0이 아니며, NULL이 아닌 이유는 무엇입니까? 단순히 < 0<= 0을 변경,왜`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(); 

당신은이에 대한 자신의 C 함수를 작성할 수는 0을 반환하지 않습니다 같은

+0

HTTP ://www.postgresql-archive.org/array-ndims-never-returns-zero-td5998579.html @Lukasz 답장을 수락하십시오 - 올바른 질문 (오늘은 오늘)과 실제로는 (적어도 오늘은) 적절하게 문서화되지 않았습니다 –

답변

1

보인다. 이것의 뒤에 추론에 관해서는, 나는 아무것도를 찾아 낼 수 없다.

소스가에 (내가 처음 확인 무엇으로, 9.6.2에 대해 같은 것) https://www.postgresql.org/ftp/source/v10.1/

파일 : 단순, 10 라인 기능 ./src/backend/utils/adt/arrayfuncs.c

봐 : array_ndims

+0

코드베이스에 대한 링크를 넣어주십시오. 빈 배열의 수를 0으로 예상 할 수도 있습니다. 어쩌면 smbd 방금 배열을 빈 배열을 검사하지 않으려는 경우? .. –

+0

@ VaoTsun 다시 차원을 계산하는 (함수를 변수에서 보유하지 않는) 및 반환하는 대신 NULL을 반환하고 누군가가 이것을 쓰는 것보다 조금 더 많은 시간이 소요됩니다. 함수는 아무도 0 차원 배열을 검사 할 필요가없는 것으로 생각했습니다. –

+0

죄송합니다. https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/arrayfuncs.c#L1635와 같은 뜻입니다. :) –