Re: Support for negative index values in array fetching - Mailing list pgsql-hackers

From Florian Pflug
Subject Re: Support for negative index values in array fetching
Date
Msg-id 1EE520A0-7EBE-44F9-8614-BF28E34BF68C@phlo.org
Whole thread Raw
In response to Re: Support for negative index values in array fetching  (Pavel Stehule <pavel.stehule@gmail.com>)
Responses Re: Support for negative index values in array fetching  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-hackers
On Jan5, 2011, at 15:17 , Pavel Stehule wrote:
> 2011/1/5 Florian Pflug <fgp@phlo.org>:
>> How so? You'd still be able to get the last element by simply writing
>> 
>>  array_relative(some_array, array[-1]).
>> 
>> Or, if we made the function variadic, by writing
>> 
>>  array_relative(some_array, -1).
> 
> Sorry, but It isn't too intuitive. Minimally for me. Why you don't
> thinking about simple functions with only positive arguments. There
> are only four combinations. I don't think we must have only one super
> function.
> 
> we need functionality for:
> 
> a) get first n items
> b) get items without last n items
> c) get last n items
> d) skip first n items

Now you've moved the goalpost - the OP wanted to access individual
elements, not slices! To support slices, a three-argument version
of array_relative() would be required, with the signature
 array_relative(some_array anyarray, first int[], last int[])

Your requirements (a) to (d) are then easily satisfied

a) array_relative(ary, array[0], array[n-1])
b) array_relative(ary, array[0], array[-n-1])
c) array_relative(ary, array[-n], array[-1])
d) array_relative(ary, array[n], array[-1])

The individual function approach might be a tad more readable for
one-dimensional arrays, but they don't scale well to the general
case.

Maybe the OP could comment on whether any of these solutions
would fit his needs?

best regards,
Florian Pflug



pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: pg_upgrade patches applied
Next
From: Bruce Momjian
Date:
Subject: pg_upgrade cleanup for map struct creation