> The column names and types are determined in the parser, and used in the
> planner, optimizer, and executor. I'm not sure how the backend could
> plan a join or a where criteria otherwise.
>
> Remember that the function has to look just like a table or a subselect
> (i.e a RangeVar). With a table, the column names and types are
> predefined. With a subselect, parsing it yields the same information.
> With a table function, we need some way of providing it -- i.e. either
> with a predefined type, or now with a definition right in the FROM clause.
Or you could "parse" the function by retrieving the first row from the it
and assuming that that's the function definition?
Chris