[PATCH] [LARGE] select * from cursor foo

Поиск
Список
Период
Сортировка
От Alex Pilosov
Тема [PATCH] [LARGE] select * from cursor foo
Дата
Msg-id Pine.BSO.4.10.10108290009521.19501-200000@spider.pilosoft.com
обсуждение исходный текст
Ответы Re: [PATCH] [LARGE] select * from cursor foo  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: [PATCH] [LARGE] select * from cursor foo  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Attached patch does the above.

Notes:
1. Incompatible changes: CURSOR is now a keyword and may not be used as an
identifier (tablename, etc). Otherwise, we get shift-reduce conflicts in
grammar.

2. Major changes: 

a) RangeTblEntry (RTE for short) instead of having two possibilities,
subquery and non-subquery, now has a rtetype field which can be of 3
possible states: RTE_RELATION, RTE_SUBSELECT, RTE_PORTAL). The
type-specific structures are unionized, so where you used to have
rte->relid, now you must do rte->u.rel.relid.

Proper way to check what is the RTE type is now checking for rte->rtetype
instead of checking whether rte->subquery is null.

b) Similarly, RelOptInfo now has a RelOptInfoType which is an enum with 4
states, REL_PLAIN,REL_SUBQUERY,REL_JOIN,REL_PORTAL. I did not do the
unionization of type-specific structures. Maybe I should've if I'm going
to get in a big change anyway.

c) There's a function PortalRun which fetches N records from portal and
sets atEnd/atStart values properly. It replaces code duplicated in 2
places. 


How to test: 

declare foo cursor for select * from pg_class;

select * from cursor foo;

Documentation updates will be forthcoming ASAP, I just wanted to get this
patch in queue before the freeze. Or at least making sure someone could
look through this patch before freeze. :)

Next patch will be one to support "SELECT * FROM func(arg1,arg2)" which
would work by creating first a special kind of portal for selection from a
function and then setting query source to be that portal.

-alex

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

Предыдущее
От: Alex Pilosov
Дата:
Сообщение: [PATCH] [LARGE] select * from cursor foo
Следующее
От: Karel Zak
Дата:
Сообщение: Re: compile error: c_lock assembler