Re: [PATCH] Exorcise "zero-dimensional" arrays (Was: Re: Should array_length() Return NULL) - Mailing list pgsql-hackers

From Dean Rasheed
Subject Re: [PATCH] Exorcise "zero-dimensional" arrays (Was: Re: Should array_length() Return NULL)
Date
Msg-id CAEZATCWCkTKw7-Cg_smDB7famfE6q6W_VKF_tR8bAh8NAC44JA@mail.gmail.com
Whole thread Raw
In response to Re: [PATCH] Exorcise "zero-dimensional" arrays (Was: Re: Should array_length() Return NULL)  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [PATCH] Exorcise "zero-dimensional" arrays (Was: Re: Should array_length() Return NULL)  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On 28 March 2013 00:04, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Brendan Jurd <direvus@gmail.com> writes:
>> On 28 March 2013 09:39, Dean Rasheed <dean.a.rasheed@gmail.com> wrote:
>>> Maybe. But even in 1-D, it's still jumping from having one empty array
>>> to infinitely many starting at different indexes, e.g., '{}'::int[] !=
>>> '[4:3]={}'::int[]. There may be a certain logic to that, but I'm not
>>> convinced about its usefulness.
>
>> We already have the ability to define lower bounds other than 1 on
>> arrays, and it would be inconsistent to allow that for arrays with
>> elements, but not for arrays without.
>
> Yeah, if '[1:1]={0}'::int[] is distinct from '[2:2]={0}'::int[],
> it's a bit hard to argue that '[1:0]={}'::int[] must not be
> distinct from '[2:1]={}'::int[].  If we were doing this from scratch
> we might drop the whole notion of nondefault lower bounds, but that
> ship sailed ages ago.
>

You could make the exact same argument for ranges --- if
'[1,1]'::int4range is distinct from '[2,2]'::int4range, why isn't
'[1,1)'::int4range distinct from '[2,2)'::int4range?

I see ranges and arrays as very closely related because the extents of
an array are an integer range, and the extents of an empty array are
an empty range. Moreover, they have almost identical API functions.

There are two internally self-consistent models for handling empty
ranges/arrays --- one in which empty ranges/arrays are considered not
to have lower/upper bounds, and one in which they are. In the first
model, there is only one empty range/array. In the second, there are
infinitely many, all different. Both models can be written in a
consistent way, but what seems inconsistent is to choose one model for
ranges, and change to a different model for arrays.

Regards,
Dean



pgsql-hackers by date:

Previous
From: Josh Berkus
Date:
Subject: Re: [PATCH] Exorcise "zero-dimensional" arrays (Was: Re: Should array_length() Return NULL)
Next
From: Michael Paquier
Date:
Subject: Re: Support for REINDEX CONCURRENTLY