Re: Anonymous code block with parameters
Merlin Moncure <mmoncure@gmail.com>
From: Merlin Moncure <mmoncure@gmail.com>
To: Hannu Krosing <hannu@2ndquadrant.com>
Cc: Marko Tiikkaja <marko@joh.to>, Vik Fearing <vik.fearing@dalibo.com>,
Pavel Stehule <pavel.stehule@gmail.com>,
Andres Freund <andres@2ndquadrant.com>,
Heikki Linnakangas <hlinnakangas@vmware.com>,
Craig Ringer <craig@2ndquadrant.com>,
Kalyanov Dmitry <kalyanov.dmitry@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2014-09-19T14:26:17Z
Lists: pgsql-hackers
On Thu, Sep 18, 2014 at 5:22 PM, Hannu Krosing <hannu@2ndquadrant.com> wrote:
> Though it would be even nicer to have fully in-line type definition
>
> SELECT (tup).* FROM
> (
> SELECT CASE WHEN .. THEN ROW(1,2,3)::(a int, b text, c int2)
> WHEN .. THEN ROW(2,3,4)
> ELSE ROW (3,4,5) END AS tup
> FROM ..
> ) ss
+1. Workaround at present (which I mostly use during json serialization) is:
SELECT (tup).* FROM
(
SELECT CASE WHEN .. THEN
(SELECT q FROM (SELECT 1, 2, 3) q)
WHEN .. THEN
(SELECT q FROM (SELECT 2, 3, 4) q)
ELSE (SELECT q FROM (SELECT 3, 4, 5) q)
END AS tup
FROM ..
) ss
If you're talking in line type definitions (which is kinda off topic)
though, it'd be nice to consider:
* nested type definition:
create type foo_t as
(
a text,
b int,
bars bar_t[] as
(
c int,
d text
),
baz baz_t as
(
e text,
f text
)
);
* ...and recursive type references (not being able to recursively
serialize json is a major headache)
create type foo_t as
(
path text,
children foo_t[]
);
merlin