Re: ARRAY() returning NULL instead of ARRAY[] resp. {}

Поиск
Список
Период
Сортировка
Искать
От
Bruce Momjian
Тема
Re: ARRAY() returning NULL instead of ARRAY[] resp. {}
Дата
Msg-id
200506042252.j54MqVu14936@candle.pha.pa.us
Ответ на
Список
Дерево обсуждения
ARRAY() returning NULL instead of ARRAY[] resp. {} Markus Bertheau <twanger@bluetwanger.de>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} "Jan B." <jan@monso.de>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Markus Bertheau <twanger@bluetwanger.de>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Joe Conway <mail@joeconway.com>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Tom Lane <tgl@sss.pgh.pa.us>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Markus Bertheau <twanger@bluetwanger.de>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Markus Bertheau ☭ <twanger@bluetwanger.de>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Tom Lane <tgl@sss.pgh.pa.us>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Joe Conway <mail@joeconway.com>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Joe Conway <mail@joeconway.com>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Bruce Momjian <pgman@candle.pha.pa.us>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Joe Conway <mail@joeconway.com>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Bruce Momjian <pgman@candle.pha.pa.us>
Re: ARRAY() returning NULL instead of ARRAY[] resp. {} Achilleus Mantzios <achill@matrix.gatewaynet.com>
Joe Conway wrote:
> 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.

OK, so '[1:0]' seems correct.  How would to specify such an array
manually in a string?

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610) 359-1001 +  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

В списке pgsql-sql по дате отправления
От: Joe Conway
Дата:
От: Michael Fuhr
Дата:
FAQ