From: | Joe Conway <mail(at)joeconway(dot)com> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Markus Bertheau <twanger(at)bluetwanger(dot)de>, pgsql-sql(at)postgresql(dot)org |
Subject: | Re: ARRAY() returning NULL instead of ARRAY[] resp. {} |
Date: | 2005-06-04 21:01:18 |
Message-ID: | 42A2169E.9020700@joeconway.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-patches pgsql-sql |
Bruce Momjian wrote:
> Joe Conway wrote:
>>
>>Any thoughts on how this should be handled for an empty 1D array?
>
> No one responed to this email, so I will try. Is this the one
> dimmentional array you were talking about?
>
> test=> select array_dims('{}'::integer[]);
> array_dims
> ------------
>
> (1 row)
In this case, what you get is actually a dimensionless array. Literally,
you get this:
if (nitems == 0)
{
/* Return empty array */
retval = (ArrayType *) palloc0(sizeof(ArrayType));
retval->size = sizeof(ArrayType);
retval->elemtype = element_type;
PG_RETURN_ARRAYTYPE_P(retval);
}
I.e. the array structure is allocated, the size is set (which is
required since arrays are varlena), and the element type is initialized.
There is no initialization of ndim, ARR_DIMS(), or ARR_LBOUND().
In this case, since there are no dimensions, array_dims() probably does
the right thing by returning NULL.
> Why is [1:0] wrong to return?
>
I'm not sure it is wrong -- it just seems a bit strange. The difference
is that in order to return an empty *one-dimensional* array, ndim,
ARR_DIMS(), and ARR_LBOUND() are all appropriately set (by the patched
code). Basically, ndim == 1, ARR_DIMS() is a single element int array (C
array that is) indicating 0 elements for dimension 1, and ARR_LBOUND()
is a single element int array indicating a lower bound of 1. This leads
to the array_dims() return value of [1:0]. The value 1 is unquestionably
correct for the lower bound index, but what should be reported for the
upper bound? We can't return [1:1], because that would indicate that we
have one element.
Joe
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2005-06-04 22:52:31 | Re: ARRAY() returning NULL instead of ARRAY[] resp. {} |
Previous Message | Gevik babakhani | 2005-06-04 20:59:19 | PGDN source browser |
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2005-06-04 21:42:01 | Re: return_next for plperl (was Re: call for help) |
Previous Message | Bruce Momjian | 2005-06-04 20:56:46 | Re: character type value is not padded with spaces |
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2005-06-04 22:52:31 | Re: ARRAY() returning NULL instead of ARRAY[] resp. {} |
Previous Message | Bruce Momjian | 2005-06-04 17:52:16 | Re: ARRAY() returning NULL instead of ARRAY[] resp. {} |