Re: Set Returning Functions (SRF) - request for patch review - Mailing list pgsql-hackers

From Joe Conway
Subject Re: Set Returning Functions (SRF) - request for patch review
Date
Msg-id 3CD807A7.3000006@joeconway.com
Whole thread Raw
In response to Set Returning Functions (SRF) - request for patch review and comment  (Joe Conway <mail@joeconway.com>)
Responses Re: Set Returning Functions (SRF) - request for patch review and comment
List pgsql-hackers
Tom Lane wrote:
>>4. The SRF *must* be aliased in the FROM clause. This is similar to the 
>>requirement for a subselect used in the FROM clause.
> 
> This seems unnecessary; couldn't we use the function name as the default
> alias name?  The reason we require an alias for a subselect is that
> there's no obvious automatic choice for a subselect; but there is for a
> function.

Yeah, I was on the fence about this. The only problem I could see is 
when the function returns a base type, what do I use for the column 
alias? Is it OK to use the same alias for the relation and column?


> 
> You may not want to hear this at this point ;-) but I'd be strongly
> inclined to s/portal/function/ throughout the patch.  The implementation
> doesn't seem to have anything to do with portals as defined by
> portalmem.c, so using the same name just sounds like a recipe for

I was already thinking the same thing. It will be a real PITA, but I do 
believe it is the right thing to do.


> The patch's approach to checking function execute permissions seems
> wrong, because it only looks at the topmost node of the function
> expression.  Consider
>     select ... from myfunc(1, sin(x))
> Probably better to let init_fcache do the checking instead when the
> expression is prepared for execution.

OK.


> + Datum ExecEvalFunc(Expr *funcClause, ExprContext *econtext,
> +              bool *isNull, ExprDoneCond *isDone);
> + 
> 
> (and a corresponding "extern" in some other .c file)  Naughty naughty...
> this should be in a .h file.  But actually you should probably just be
> calling ExecEvalExpr anyway, rather than hard-wiring the assumption that
> the top node of the expression tree is a Func.  Most of the other places
> that assume that could be fixed easily by using functions like
> exprType() in place of direct field access.

OK.


> 
> I've been toying with eliminating Iter nodes, which don't seem to do
> anything especially worthwhile --- it'd make a lot more sense to add
> a "returnsSet" boolean in Func nodes.  Dunno if that simplifies life
> for you.  If you take the above advice you may find you don't really
> care anymore whether there's an Iter node in the tree.

Actually it gets in my way a bit, and I think I remember some 
discussions wrt removing it. But I wasn't sure how large the impact 
would be on the current API if I messed with it, so I thought I'd leave 
it for now. Do you think it's worth it to address this now?


> 
> ExecPortalReScan does not look like it works yet (in fact, it looks like
> it will dump core).  This is important.  It also brings up the question
> of how you are handling parameters passed into the function.  I think
> there's a lot more to that than meets the eye.

Yeah, I took a first shot at writing the rescan support, but have not 
yet begun to use/test it. I'd like to get the rest of the patch to an 
acceptable level first, then concentrate on get materialization and 
rescan working.


> 
> I have been thinking that TupleStore ought to be extended to allow
> fetching of existing entries without foreclosing the option of storing
> more tuples.  This would allow you to operate "on the fly" without
> necessarily having to fetch the entire function output on first call.
> You fetch only as far as you've been requested to provide answers.
> (Which would be a good thing; consider cases with LIMIT for example.)
> 

Hmm, I'll have to look at this more closely. When I get to the 
materialization/rescan stuff, I'll see if I can address this idea.

Thanks for the review and comments!

Joe



pgsql-hackers by date:

Previous
From: Kovacs Zoltan
Date:
Subject: 7.1.3: pg_dump hierarchy problem
Next
From: "Dann Corbit"
Date:
Subject: Re: OK, lets talk portability.