Re: [SQL] ARRAY() returning NULL instead of ARRAY[]

Поиск
Список
Период
Сортировка
От Markus Bertheau ☭
Тема Re: [SQL] ARRAY() returning NULL instead of ARRAY[]
Дата
Msg-id 1118074367.5506.16.camel@dicaprio.akademie1.de
обсуждение исходный текст
Ответ на Re: [SQL] ARRAY() returning NULL instead of ARRAY[] resp.  (Joe Conway <mail@joeconway.com>)
Ответы Re: [SQL] ARRAY() returning NULL instead of ARRAY[] resp.  (Joe Conway <mail@joeconway.com>)
Re: [SQL] ARRAY() returning NULL instead of ARRAY[]  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-hackers
В Пнд, 06/06/2005 в 08:58 -0700, Joe Conway пишет:
> Joe Conway wrote:
> > Actually, consistent with my last post, I think array_upper() on a 
> > zero-element array should return NULL. A zero-element array has a 
> > defined lower bound, but its upper bound is not zero -- it is really 
> > undefined.
> 
> Just to clarify my response, this is what I propose:
> 
> regression=# select array_upper('[2][1:]={{},{}}'::int[],1);
>   array_upper
> -------------
>             2
> (1 row)
> 
> regression=# select array_upper('[2][1:]={{},{}}'::int[],2) IS NULL;
>   ?column?
> ----------
>   t
> (1 row)

Hmm, this gets really complicated and inconsistent. Complicated means
unusable. What about modifying the dimension syntax such that the second
number means number of elements instead of upper bound? That particular
problem would go away then, and array_upper('[0:0]={}'::int[]) can
return the correct 0 then.

What I'm actually worrying about is that array_upper(array(select 1
where false)) returns 0.

An option would be to drop the possibility to let the array start at
another index than 0. I don't know why it was decided to do that in the
first place. It seems a rather odd feature to me.

Markus
-- 
Markus Bertheau ☭ <twanger@bluetwanger.de>



В списке pgsql-hackers по дате отправления:

Предыдущее
От: David Fetter
Дата:
Сообщение: Re: [PATCHES] regexp_replace
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: Quick-and-dirty compression for WAL backup blocks