From: | "Merlin Moncure" <mmoncure(at)gmail(dot)com> |
---|---|
To: | "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "Robert Haas" <robertmhaas(at)gmail(dot)com>, "Peter Eisentraut" <peter_e(at)gmx(dot)net>, "Jeff Davis" <pgsql(at)j-davis(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: array_agg and array_accum (patch) |
Date: | 2008-11-20 21:44:46 |
Message-ID: | b42b73150811201344s2e1a0380n7842889a86a9f259@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, Nov 20, 2008 at 4:11 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> "Robert Haas" <robertmhaas(at)gmail(dot)com> writes:
>> It looks to me like section 34.10 of the docs might benefit from some
>> sort of update in light of this patch, since the builtin array_agg now
>> does the same thing as the proposed user-defined array_accum, only
>> better. Presumably we should either pick a different example, or add
>> a note that a builtin is available that does the same thing more
>> efficiently.
>
> I did the latter. If you can think of an equally plausible and short
> example of a polymorphic aggregate, we could certainly replace the
> example instead ...
maybe show how to stack arrays?
see: http://www.nabble.com/text-array-accumulate-to-multidimensional-text-array-td20098591.html
IMO a good example of how you can write aggregates in a language other
than C, which is IMO an underutilized technique.
CREATE OR REPLACE FUNCTION array_cat1(p1 anyarray, p2 anyarray)
RETURNS anyarray AS
$$
SELECT CASE WHEN $1 = '{}'::text[] THEN ARRAY[p2] ELSE ARRAY_CAT(p1, p2) END;
$$ LANGUAGE sql;
CREATE AGGREGATE array_stack(anyarray)
(
sfunc = array_cat1,
stype = anyarray,
initcond = '{}'
);
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | David Fetter | 2008-11-20 22:05:49 | Re: Cool hack with recursive queries |
Previous Message | Tom Lane | 2008-11-20 21:30:51 | Re: Autoconf, libpq and replacement function |