Thread: I can't get row type from tuple (SPI)

I can't get row type from tuple (SPI)

From
"Pavel Stehule"
Date:
Hello

I execute "select anyrowfce(..)" in plpgsql via exec_run_select

I need to get inner row, but I can't find good way for it

retval = SPI_getbinval(estate->eval_tuptable->vals[0], estate->eval_tuptable->tupdesc,1);

rettype = SPI_gettypeid(estate->eval_tuptable->tupdesc,1);
rettupdesc = lookup_rowtype_tupdesc(rettype,0);

rettupdesc is ok, but when I try SPI_getbinval(retval, rettupdesc, ...) I 
kill backend.

What I do wrong? What is optimal process to get first field in row, when 
this first field is row too.

for example I need to way for value 1 in select

select row(row(1,2,3)); => "("(1,2,3)")"

Can I get inner tupdesc without lookup_rowtype_tupdesc?

Thank you very much

Pavel Stehule

_________________________________________________________________
Citite se osamele? Poznejte nekoho vyjmecneho diky Match.com. 
http://www.msn.cz/



Re: I can't get row type from tuple (SPI)

From
Tom Lane
Date:
"Pavel Stehule" <pavel.stehule@hotmail.com> writes:
> rettupdesc = lookup_rowtype_tupdesc(rettype,0);

This is wrong --- if you don't know what typmod to use, *always* pass -1
not 0.  (I suspect that rettype is RECORD and that -1 would have
resulted in a NULL result.)

It seems like SPI is missing a needed function: it should have an
SPI_gettypmod to go along with SPI_gettypeid.  This would probably
give you the correct typmod to pass to lookup_rowtype_tupdesc here.
        regards, tom lane


Re: I can't get row type from tuple (SPI)

From
Bruce Momjian
Date:
Added to TODO:
* Add SPI_gettypmod() to return the typemod for a TupleDesc


---------------------------------------------------------------------------

Tom Lane wrote:
> "Pavel Stehule" <pavel.stehule@hotmail.com> writes:
> > rettupdesc = lookup_rowtype_tupdesc(rettype,0);
> 
> This is wrong --- if you don't know what typmod to use, *always* pass -1
> not 0.  (I suspect that rettype is RECORD and that -1 would have
> resulted in a NULL result.)
> 
> It seems like SPI is missing a needed function: it should have an
> SPI_gettypmod to go along with SPI_gettypeid.  This would probably
> give you the correct typmod to pass to lookup_rowtype_tupdesc here.
> 
>             regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend
> 

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073