anonymous composite types - how to pass tupdesc to the function
I'm looking at modifications to dblink to allow it to make use of table
functions. One item which is very much needed is the ability to define
dblink as returning setof record, so that it can return a tuple as
described at runtime in the query string.
I'm trying to come up with the best method to pass the query string
columndef, or better yet the tuple description, to the function. Any
suggestions on an approach?
Thanks,
Joe
Joe Conway <mail@joeconway.com> writes:
I'm trying to come up with the best method to pass the query string
columndef, or better yet the tuple description, to the function. Any
suggestions on an approach?
Can't it get it for itself from the results of the query, ie, look at
PQftype() and so on to build a tupledesc?
I guess there are some gotchas with inconsistent type OIDs between
remote and local databases, but that still seems much less of a risk
than manual errors in giving the columnset definition. You could at
least check that PQfsize matches the local type's typlen as a way of
detecting chance collisions of user-defined type OIDs.
regards, tom lane
Tom Lane wrote:
Joe Conway <mail@joeconway.com> writes:
I'm trying to come up with the best method to pass the query string
columndef, or better yet the tuple description, to the function. Any
suggestions on an approach?Can't it get it for itself from the results of the query, ie, look at
PQftype() and so on to build a tupledesc?
Hmm. Good point. That certainly works for dblink.
I guess most functions with need for anonymous composite types would be
able to derive a tupdesc from libpq (dblink), SPI
(tablefunc.c:crosstab), function arguments (tablefunc.c:crosstab), or it
would be known in advance (guc.c:show_all_settings).
Can anyone think of a use case where the *only* source of tuple
description would come from the query column def?
I guess there are some gotchas with inconsistent type OIDs between
remote and local databases, but that still seems much less of a risk
than manual errors in giving the columnset definition. You could at
least check that PQfsize matches the local type's typlen as a way of
detecting chance collisions of user-defined type OIDs.
Another good point.
Thanks!
Joe