Thread: 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