On Jan5, 2011, at 10:25 , Peter Eisentraut wrote:
> On sön, 2011-01-02 at 12:47 +0100, Florian Pflug wrote:
>> The only way around that would be to introduce magic constants "lower", 
>> "upper" that
>> can be used within index expressions and evaluate to the indexed dimension's 
>> lower
>> and upper bound. You'd then use
>> 
>>  my_array[upper], my_array[upper-1], ...
>> 
>> to refer to the last, second-to-last, ... element in the array. Actually 
>> doing this
>> could get pretty messy, though - not sure if it's really worth the effort...
> 
> How about just some functions:
> 
> array_first(array, dim)
> array_last(array, dim)


You image these to return the actual element, not the first and last index 
value, right?
Because we already have array_lower() and array_upper() which return the lower 
and upper
index bound for a certain dimension.
(http://www.postgresql.org/docs/9.0/interactive/functions-array.htm)

A more general solution would be a function

array_relative(array anyarray, indices int[])

which would return the element indexed by <indices>, where positive indices are 
assumed to
be relative to the respective dimension's lower bound and negative indices to 
the
upper bound + 1.

For slices, we could additionally have

array_relative(array anyarray, indices_start int[], indices_end int[])

best regards,
Florian Pflug





-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to