Re: Internal function call from C-language function
От | Zoltan Boszormenyi |
---|---|
Тема | Re: Internal function call from C-language function |
Дата | |
Msg-id | 457848D9.3090208@dunaweb.hu обсуждение исходный текст |
Ответ на | Re: Internal function call from C-language function (Zoltan Boszormenyi <zboszor@dunaweb.hu>) |
Ответы |
Re: Internal function call from C-language function
|
Список | pgsql-general |
Hi, Zoltan Boszormenyi írta: > Hi, > > Martijn van Oosterhout írta: >> On Thu, Dec 07, 2006 at 01:40:22PM +0100, Zoltan Boszormenyi wrote: >> >>> text_in() doesn't exists, it's textin() but I have to call it through >>> DirectFunctionCall1(), like this: >>> >>> yeardatum = DirectFunctionCall1(textin, CStringGetDatum("year")); >>> >>> However, the session crashes on the subsequent >>> >>> returndatum = DirectFunctionCall2(timestamp_part, yeardatum, timest); >>> >> >> It would be a good idea to actually find out where it crashes, that >> would help you work out what the actual problem is. Just looking at the >> code you posted, I only see this other bit that looks a bit suspect: >> >> Datum timest; >> bool isnull; >> >> t = PG_GETARG_HEAPTUPLEHEADER(0); >> timest = DatumGetTimestamp(GetAttributeByName(t, "ts_today", >> &isnull)); >> >> You're calling DatumGetTimestamp() which would return a timestamp >> (probably some structure) but you're storing it in a Datum. Just take >> the result of GetAttributeByName directly. >> > > Thanks, that worked for me. > > I have just one more question: > How can I get an Oid out of a Datum, i.e. > how do I know what type I get in a given Datum? > DatumGetObjectId() seems to give me an Oid that > was specifically stored as a Datum. I have found the alternative solution. If t is HeapTupleHeader then: Oid tupType; int32 tupTypmod; TupleDesc tupDesc; tupType = HeapTupleHeaderGetTypeId(t); tupTypmod = HeapTupleHeaderGetTypMod(t); tupDesc = lookup_rowtype_tupdesc(tupType, tupTypmod); will give me the needed TupleDesc and I can use SPI_gettypeid(). Thanks and best regards, Zoltán
В списке pgsql-general по дате отправления: