Thread: SRF question

SRF question

From
Franco Bruno Borghesi
Date:
Hi everyone.

I need to create a C function that returns a row, and the type of this row must be the same of a type that I've created using CREATE TYPE.

I've seen the function:
TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases)
but I don't understand two things:

1)I just know the name of the type, not its oid... woud it be ok if I execute a SELECT on pg_type asking for typname to find the oid of the type I want to return? or is there any function like RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call passing just the typename as a char *?

2)in case TypeGetTupleDesc is the only option, what is the second argument?

Thanks in advance.

PS: sorry if you receive this message twice, I sent it on saturday but it seems it never arrived :)

Attachment

Re: SRF question

From
Tom Lane
Date:
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes:
> 1)I just know the name of the type, not its oid... woud it be ok if I
> execute a SELECT on pg_type asking for typname to find the oid of the
> type I want to return? or is there any function like
> RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call
> passing just the typename as a char *?

A SELECT seems like the hard way.  Look into parse_type.c for some
routines that might help.  Offhand parseTypeString() is probably your
best bet.

> 2)in case TypeGetTupleDesc is the only option, what is the second
> argument?

I believe you can just set it to NIL, since you are only interested in
composite types.

            regards, tom lane

Re: SRF question

From
Franco Bruno Borghesi
Date:
yes, parseTypeString() seems to be the way.

I've found parseTypeString() in plpgsql.so... would it be ok to call dlopen('plpgsql.so', ...) from my C code to access this function or is there some other method I sould use?

thanks tom.

On Mon, 2003-09-08 at 12:02, Tom Lane wrote:
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes:
> 1)I just know the name of the type, not its oid... woud it be ok if I
> execute a SELECT on pg_type asking for typname to find the oid of the
> type I want to return? or is there any function like
> RelationNameGetTupleDesc (maybe TypeNameGetTupleDesc) that I can call
> passing just the typename as a char *?

A SELECT seems like the hard way.  Look into parse_type.c for some
routines that might help.  Offhand parseTypeString() is probably your
best bet.

> 2)in case TypeGetTupleDesc is the only option, what is the second
> argument?

I believe you can just set it to NIL, since you are only interested in
composite types.
		regards, tom lane
Attachment

Re: SRF question

From
Tom Lane
Date:
Franco Bruno Borghesi <franco@akyasociados.com.ar> writes:
> I've found parseTypeString() in plpgsql.so... would it be ok to call
> dlopen('plpgsql.so', ...) from my C code to access this function

Why would you need to do that!??!  It's in the main executable.

            regards, tom lane