Typing Records

Поиск
Список
Период
Сортировка
От David E. Wheeler
Тема Typing Records
Дата
Msg-id F197527F-D39E-4E31-9A1B-ED371DD22B2D@kineticode.com
обсуждение исходный текст
Ответы Re: Typing Records  (Joe Conway <mail@joeconway.com>)
Re: Typing Records  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hackers,

I've been trying to come up with a simpler way to iterate over a series of values in pgTAP tests than by creating a
table,inserting rows, and then selecting from the table. The best I've come up with so far is: 
   CREATE TYPE vcmp AS ( lv semver, op text, rv semver);
   SELECT cmp_ok(lv, op, rv) FROM unnest(ARRAY[       ROW('1.2.2',  '=', '1.2.2')::vcmp,       ROW('1.2.23', '=',
'1.2.23')::vcmp  ]); 

Not bad, but I was hoping that I could cast all the rows at once, without the type, like so:
   SELECT cmp_ok(lv, op, rv) FROM unnest(ARRAY[       ROW('1.2.2',  '=', '1.2.2'),       ROW('1.2.23', '=', '1.2.23')
])AS f(lv semver, op text, rv semver); 

But this gives me an error (9.0b4):

psql:t/types.pg:205: ERROR:  function return row and query-specified return row do not match
DETAIL:  Returned type unknown at ordinal position 1, but query expects semver.

Pity it doesn't default to casting to text there. So I tried to just cast the first row:
   SELECT cmp_ok(lv, op, rv) FROM unnest(ARRAY[       ROW('1.2.2'::semver,  '='::text, '1.2.2'::semver),
ROW('1.2.23','=', '1.2.23')   ]) AS f(lv semver, op text, rv semver); 

That's even worse!

psql:t/types.pg:205: ERROR:  invalid memory alloc request size 18446744071604011012

Wha??

That seems like a bug.

Aside from that, might there be another way to do this without an explicit composite type? Maybe with VALUES() or
something?

Thanks,

David



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: Interruptible sleeps (was Re: CommitFest 2009-07: Yay, Kevin! Thanks, reviewers!)
Следующее
От: KaiGai Kohei
Дата:
Сообщение: Re: security hook on authorization