Обсуждение: I can't get row type from tuple (SPI)
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/
"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
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