From: | "David E(dot) Wheeler" <david(at)kineticode(dot)com> |
---|---|
To: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Robert Haas <robertmhaas(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, Mike Fowler <mike(at)mlfowler(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Initial review of xslt with no limits patch |
Date: | 2010-08-06 20:57:13 |
Message-ID: | F6316F64-BB7D-4B4C-8684-99D7E6673F53@kineticode.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Aug 6, 2010, at 1:49 PM, Pavel Stehule wrote:
> yes it is one a possibility and probably best. The nice of this
> variant can be two forms like current variadic does - foo(.., a :=
> 10, b := 10) or foo(.., variadic ARRAY[(a,10),(b,10)])
I started fiddling and got as far as this:
CREATE TYPE pair AS ( key text, val text );
CREATE OR REPLACE FUNCTION pair(anyelement, anyelement) RETURNS pair
LANGUAGE SQL AS $$
SELECT ROW($1, $2)::pair;
$$;
CREATE OR REPLACE FUNCTION pair(text, text) RETURNS pair
LANGUAGE SQL AS $$
SELECT ROW($1, $2)::pair;
$$;
CREATE OPERATOR ~> (
LEFTARG = anyelement,
RIGHTARG = anyelement,
PROCEDURE = pair
);
CREATE OPERATOR ~> (
LEFTARG = text,
RIGHTARG = text,
PROCEDURE = pair
);
CREATE OR REPLACE FUNCTION foo(variadic pair[]) RETURNS SETOF text
LANGUAGE SQL AS $$
-- SELECT unnest($1)::text
SELECT $1[1].key
UNION SELECT $1[1].val
UNION SELECT $1[2].key
UNION SELECT $1[2].val;
$$;
SELECT foo('this' ~> 'that', 1 ~> 4);
Not bad, I think. I kind of like it. It reminds me how much I hate the % hstore construction operator, though (the new name for =>).
Best,
David
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2010-08-06 21:02:28 | Re: Functional dependencies and GROUP BY |
Previous Message | Peter Eisentraut | 2010-08-06 20:55:06 | Re: review: xml_is_well_formed |