Re: delta relations in AFTER triggers
От | Heikki Linnakangas |
---|---|
Тема | Re: delta relations in AFTER triggers |
Дата | |
Msg-id | 53FE4C1F.3030109@vmware.com обсуждение исходный текст |
Ответ на | Re: delta relations in AFTER triggers (Kevin Grittner <kgrittn@ymail.com>) |
Ответы |
Re: delta relations in AFTER triggers
|
Список | pgsql-hackers |
On 08/28/2014 12:03 AM, Kevin Grittner wrote: > Heikki Linnakangas <hlinnakangas@vmware.com> wrote: >> I suggest adding a new hook to the ParseState struct, (p_rangevar_hook >> ?). The planner calls it whenever it sees a reference to a table, and >> the hook function returns back some sort of placeholder reference to the >> tuplestore. With variables, the hook returns a Param node, and at >> execution time, the executor calls the paramFetch hook to fetch the >> value of the param. For relations/tuplestores, I guess we'll need to >> invent something like a Param node, but for holding information about >> the relation. Like your TsrData struct, but without the pointer to the >> tuplestore. At execution time, in the SPI_execute call, you pass the >> pointer to the tuplestore in the ParamListInfo struct, like you pass >> parameter values. >> >> Does this make sense? > > I see your point, but SPI first has to be made aware of the > tuplestores and their corresponding names and TupleDesc structures. > Does it make sense to keep the SPI_register_tuplestore() and > SPI_unregister_tuplestore() functions for the client side of the > API, and pass things along to the parse analysis through execution > phases using the techniques you describe? Sorry, I didn't understand that. What do you mean by "first", and the "client side of the API"? I don't see any need for the SPI_register_tuplestore() and and SPI_unregister_tuplestore() functions if you use the hooks. >> In essence, make the relations work like PL/pgSQL >> variables do. If you squint a little, the new/old relation is a variable >> from the function's point of view, and a parameter from the >> planner/executor's point of view. It's just a variable/parameter that >> holds a set of tuples, instead of a single Datum. > > I don't have to squint that hard -- I've always been comfortable > with the definition of a table as a relation variable, and it's not > too big a stretch to expand that to a tuplestore. ;-) In fact, I > will be surprised if someone doesn't latch onto this to create a > new "declared temporary table" that only exists within the scope of > a compound statement (i.e., a BEGIN/END block). You would DECLARE > them just like you would a scalar variable in a PL, and they would > have the same scope. Yeah, that would be cool :-). - Heikki
В списке pgsql-hackers по дате отправления: