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-24 12:12:52 |
Message-ID: | CAFj8pRBroTQofbmGFcWk1_fu7Ew1JjPpoZqS6bKXi0aGKQeRjA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi
I did some performance tests and it is interesting:
it is about 15% faster than original implementation.
Regards
Pavel
2014-10-24 13:58 GMT+02:00 Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>:
>
>
> 2014-10-24 11:43 GMT+02:00 Ali Akbar <the(dot)apaan(at)gmail(dot)com>:
>
>>
>> 2014-10-24 16:26 GMT+07:00 Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>:
>>
>>> Hi
>>>
>>> some in last patch is wrong, I cannot to compile it:
>>>
>>> arrayfuncs.c: In function ‘accumArrayResult’:
>>> arrayfuncs.c:4603:9: error: ‘ArrayBuildState’ has no member named ‘alen’
>>> astate->alen = 64; /* arbitrary starting array size */
>>> ^
>>> arrayfuncs.c:4604:9: error: ‘ArrayBuildState’ has no member named
>>> ‘dvalues’
>>> astate->dvalues = (Datum *) palloc(astate->alen * sizeof(Datum));
>>> ^
>>> arrayfuncs.c:4604:44: error: ‘ArrayBuildState’ has no member named ‘alen’
>>> astate->dvalues = (Datum *) palloc(astate->alen * sizeof(Datum));
>>> ^
>>> arrayfuncs.c:4605:9: error: ‘ArrayBuildState’ has no member named
>>> ‘dnulls’
>>> astate->dnulls = (bool *) palloc(astate->alen * sizeof(bool));
>>> ^
>>> arrayfuncs.c:4605:42: error: ‘ArrayBuildState’ has no member named ‘alen’
>>> astate->dnulls = (bool *) palloc(astate->alen * sizeof(bool));
>>> ^
>>> arrayfuncs.c:4606:9: error: ‘ArrayBuildState’ has no member named
>>> ‘nelems’
>>> astate->nelems = 0;
>>> ^
>>> arrayfuncs.c:4618:13: error: ‘ArrayBuildState’ has no member named
>>> ‘nelems’
>>> if (astate->nelems >= astate->alen)
>>> ^
>>> arrayfuncs.c:4618:31: error: ‘ArrayBuildState’ has no member named ‘alen’
>>> if (astate->nelems >= astate->alen)
>>> ^
>>> arrayfuncs.c:4620:10: error: ‘ArrayBuildState’ has no member named ‘alen’
>>> astate->alen *= 2;
>>>
>>
>> Sorry, correct patch attached.
>>
>> This patch is in patience format (git --patience ..). In previous
>> patches, i use context format (git --patience ... | filterdiff
>> --format=context), but it turns out that some modification is lost.
>>
>
> last version is compileable, but some is still broken
>
> postgres=# select array_agg(array[i, i+1, i-1])
> from generate_series(1,2) a(i);
> ERROR: could not find array type for data type integer[]
>
> but array(subselect) works
>
> postgres=# select array(select a from xx);
> array
> -------------------
> {{1,2,3},{1,2,3}}
> (1 row)
>
> Regards
>
> Pavel
>
>
>
>>
>> --
>> Ali Akbar
>>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2014-10-24 13:02:21 | Re: Function array_agg(array) |
Previous Message | Pavel Stehule | 2014-10-24 11:58:07 | Re: Function array_agg(array) |