On Jan5, 2011, at 13:08 , Pavel Stehule wrote:
> 2011/1/5 Florian Pflug <f...@phlo.org>:
>> 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[])
>> 
> 
> I don't think so this design helps. instead maintaining a data array,
> you should to maintain a indices array.


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).

It's essentially what the OP proposed, but with the function array_relative() 
in place of
the indexing operator [].

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