Re: Function array_agg(array)

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Ali Akbar <the(dot)apaan(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Function array_agg(array)
Date: 2014-10-25 08:43:07
Message-ID: CAFj8pRBAf3Sjhvt5oArbnpzFuEf2LeVk+=niR9-LRoA3JH6aYg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2014-10-25 10:16 GMT+02:00 Ali Akbar <the(dot)apaan(at)gmail(dot)com>:

> makeArrayResult1 - I have no better name now
>>>
>>> I found one next minor detail.
>>>
>>> you reuse a array_agg_transfn function. Inside is a message
>>> "array_agg_transfn called in non-aggregate context". It is not correct for
>>> array_agg_anyarray_transfn
>>>
>>
> Fixed.
>
>
>> probably specification dim and lbs in array_agg_finalfn is useless, when
>>> you expect a natural result. A automatic similar to
>>> array_agg_anyarray_finalfn should work there too.
>>>
>>> makeMdArrayResultArray and appendArrayDatum should be marked as "static"
>>>
>>
> ok, marked all of that as static.
>
>
>> I am thinking so change of makeArrayResult is wrong. It is developed for
>> 1D array. When we expect somewhere ND result now, then we should to use
>> makeMdArrayResult there. So makeArrayResult should to return 1D array in
>> all cases. Else a difference between makeArrayResult and makeMdArrayResult
>> hasn't big change and we have a problem with naming.
>>
>
> I'm thinking it like this:
> - if we want to accumulate array normally, use accumArrayResult and
> makeArrayResult. If we accumulate scalar the result will be 1D array. if we
> accumulate array, the resulting dimension is incremented by 1.
> - if we want, somehow to affect the normal behavior, and change the
> dimensions, use makeMdArrayResult.
>
> Searching through the postgres' code, other than internal use in
> arrayfuncs.c, makeMdArrayResult is used only
> in src/pl/plperl/plperl.c:plperl_array_to_datum, while converting perl
> array to postgres array.
>
> So if somehow we will accumulate array other than in array_agg, i think
> the most natural way is using accumArrayResult and then makeArrayResult.
>

ok, there is more variants and I can't to decide. But I am not satisfied
with this API. We do some wrong in structure. makeMdArrayResult is now
ugly.

>
> CMIIW
>
> Regards,
> --
> Ali Akbar
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Thom Brown 2014-10-25 09:50:47 Re: [PATCH] Support for Array ELEMENT Foreign Keys
Previous Message Ali Akbar 2014-10-25 08:16:35 Re: Function array_agg(array)