Re: array_length(anyarray)

From: Jim Nasby <jim(at)nasby(dot)net>
To: Marko Tiikkaja <marko(at)joh(dot)to>, Florian Pflug <fgp(at)phlo(dot)org>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>
Cc: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, David Fetter <david(at)fetter(dot)org>, PostGreSql hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: array_length(anyarray)
Date: 2014-01-09 22:26:48
Message-ID: 52CF2228.6030001@nasby.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 1/9/14, 11:08 AM, Marko Tiikkaja wrote:
> On 1/9/14 5:44 PM, Florian Pflug wrote:
>> On Jan9, 2014, at 14:57 , Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com> wrote:
>>> On 19 December 2013 08:05, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> wrote:
>>>> length should be irrelevant to fact so array starts from 1, 0 or anything
>>>> else
>>>
>>> Yes, this should just return the number of elements, and 0 for an empty array.
>>
>> +1. Anything that complains about arrays whose lower bound isn't 1 really
>> needs a *way* less generic name than array_length().
>
> Problem is, if you're operating on an array which could have a lower bound that isn't 1, why would you look at the length in the first place? You can't access any elements by index, you'd need to look at array_lower(). You can't iterate over the array by index, you'd need to do array_lower() .. array_lower() + array_length(), which doesn't make sense. And then there's the myriad of stuff you can do with unnest() without actually having to look at the length. Same goes for multi-dimensional arrays: you have even less things you can do there with only a length.
>
> So if we give up these constraints, we also make this function completely useless.

I'm generally opposed to creating code that doesn't support the full featureset of something (in this case, array_lower()<>1). But in this case I hope we can all agree that allowing the user to set an arbitrary array lower bound was an enormous mistake. While we might not be able to ever completely remove that behavior, I find the idea of throwing an error to be highly enticing.

Plus, as Marko said, this function is pretty useless for non-1-based arrays.

I do agree that the name is probably too generic for this though.
--
Jim C. Nasby, Data Architect jim(at)nasby(dot)net
512.569.9461 (cell) http://jim.nasby.net

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jim Nasby 2014-01-09 22:30:25 Disallow arrays with non-standard lower bounds
Previous Message Jim Nasby 2014-01-09 22:17:24 Re: Add CREATE support to event triggers