Thread: Saving SRF context

Saving SRF context

From
Salvador Fandiño
Date:
Hi,

I have implemented a SRF[*] that returns rows one by one (using 
ExprMultipleResult). But now I need to save somewhere some context 
information between calls pertaining to the same result set and I am 
unable to find a proper place for that.

I have seen that cfinfo->flinfo->fn_extra is available, but if I 
understand the mechanics of FmgrInfo correctly, that structure is not 
unique for call frame. It could be shared between several cfinfo 
structures and would be crushed on recursion (I plan to use SPI from my 
function).

So, is that right? should I build a stack there? is there any other 
place where to store context information relative to a SRF call frame?

Regards


* Code is here: https://github.com/salva/plswipl, I am trying to provide 
a procedural language using SWI-Prolog.



Re: Saving SRF context

From
Salvador Fandiño
Date:
On 03/11/2016 09:19 PM, Salvador Fandiño wrote:
> Hi,
>
> I have implemented a SRF[*] that returns rows one by one (using
> ExprMultipleResult). But now I need to save somewhere some context
> information between calls pertaining to the same result set and I am
> unable to find a proper place for that.
>
> I have seen that cfinfo->flinfo->fn_extra is available, but if I
> understand the mechanics of FmgrInfo correctly, that structure is not
> unique for call frame. It could be shared between several cfinfo
> structures and would be crushed on recursion (I plan to use SPI from my
> function).
>
> So, is that right? should I build a stack there? is there any other
> place where to store context information relative to a SRF call frame?

Replying to myself, pretty much I wanted to know is documented here:

http://www.postgresql.org/docs/devel/static/xfunc-c.html