Re: [HACKERS] SETOF function call
Le Tuesday 19 April 2005 04:16, vous avez crit : sizeof(Datum) == sizeof(long) - is that compatible with %d formatting (I'm guessing something like vsprintf takes place in elog)? Wouldn't this need %ld or %lu? Sorry if this misses the point, I wasn't clear from original post if the segfault was on elog or after it. No, the elog works fine, and will be removed in final code, so the the mistake between int and long int is not a real issue here. The code segfault later, in the other function. To be clean I am trying to in C code this: CREATE FUNCTION rpmquery(rpmheader, TEXT) RETURNS SETOF TEXT AS $$ select * from rpmquery($1, rpmtag($2)); $$ LANGUAGE SQL; Maybe it is easier to it as sql functions, but for my knowledge I like to understand what I am doing wrong :) Current buggy code is there, at the end: http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/pgrpm/pgrpm/pgheader.c?rev=1.1content-type=text/x-cvsweb-markup Of course patch/comments are welcome. Regards, Philip. On Tuesday 19 April 2005 11:53, Tom Lane wrote: Olivier Thauvin [EMAIL PROTECTED] writes: Datum header_querytxt(PG_FUNCTION_ARGS) { elog(NOTICE, querytxt); Datum tag; /* converting TEXT value to integer one */ tag = DirectFunctionCall1(rpmtagvalue, PG_GETARG_TEXT_P(1)); elog(NOTICE, querytxt %d, tag); /* header_query = function accepting integer instead text) PG_RETURN_POINTER(DirectFunctionCall2(header_query, PG_GETARG_BYTEA_P_COPY(0), tag)); } If that's a cut-and-paste, then you seem to be short a */ on the second comment ... regards, tom lane ---(end of broadcast)--- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match - Utiba Pty Ltd This message has been scanned for viruses and dangerous content by Utiba mail server and is believed to be clean. - Utiba Pty Ltd This message has been scanned for viruses and dangerous content by Utiba mail server and is believed to be clean. ---(end of broadcast)--- TIP 2: you can get off all lists at once with the unregister command (send unregister YourEmailAddressHere to [EMAIL PROTECTED]) pgpW6gKg3ZsHq.pgp Description: PGP signature
[HACKERS] SETOF function call
I hope I am on good list, else point me where I should ask. I create a C function like this: CREATE -- IFUPDATE or REPLACE FUNCTION rpmquery(rpmheader, INT) RETURNS SETOF TEXT AS 'MODULE_PATHNAME', 'header_query' LANGUAGE C IMMUTABLE STRICT; (do not take care, code come from the .sql.in) And the function works well, rpmheader is a new type with its own in/out function. But I have a problem, the second argument is an integer, ie an internal value. So I want to create a function wrapper as rpmquery(rpmheader, TEXT), the goal of this function is to first convert the human text value to internal integer value and then call the first function. But I am unable to to create a single function like I allready did with function returning single Datum: PG_FUNCTION_INFO_V1(header_querytxt); Datum header_querytxt(PG_FUNCTION_ARGS) { elog(NOTICE, querytxt); Datum tag; /* converting TEXT value to integer one */ tag = DirectFunctionCall1(rpmtagvalue, PG_GETARG_TEXT_P(1)); elog(NOTICE, querytxt %d, tag); /* header_query = function accepting integer instead text) PG_RETURN_POINTER(DirectFunctionCall2(header_query, PG_GETARG_BYTEA_P_COPY(0), tag)); } I get a segfault just after second elog. This is maybe simple for anyone reading this list, but I am unable to find an example, or a documention to do this. A simple example, or a URL is welcome. pgpxj13r7pyer.pgp Description: PGP signature
Re: [HACKERS] SETOF function call
Olivier Thauvin [EMAIL PROTECTED] writes: Datum header_querytxt(PG_FUNCTION_ARGS) { elog(NOTICE, querytxt); Datum tag; /* converting TEXT value to integer one */ tag = DirectFunctionCall1(rpmtagvalue, PG_GETARG_TEXT_P(1)); elog(NOTICE, querytxt %d, tag); /* header_query = function accepting integer instead text) PG_RETURN_POINTER(DirectFunctionCall2(header_query, PG_GETARG_BYTEA_P_COPY(0), tag)); } If that's a cut-and-paste, then you seem to be short a */ on the second comment ... regards, tom lane ---(end of broadcast)--- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match
Re: [HACKERS] SETOF function call
sizeof(Datum) == sizeof(long) - is that compatible with %d formatting (I'm guessing something like vsprintf takes place in elog)? Wouldn't this need %ld or %lu? Sorry if this misses the point, I wasn't clear from original post if the segfault was on elog or after it. Regards, Philip. On Tuesday 19 April 2005 11:53, Tom Lane wrote: Olivier Thauvin [EMAIL PROTECTED] writes: Datum header_querytxt(PG_FUNCTION_ARGS) { elog(NOTICE, querytxt); Datum tag; /* converting TEXT value to integer one */ tag = DirectFunctionCall1(rpmtagvalue, PG_GETARG_TEXT_P(1)); elog(NOTICE, querytxt %d, tag); /* header_query = function accepting integer instead text) PG_RETURN_POINTER(DirectFunctionCall2(header_query, PG_GETARG_BYTEA_P_COPY(0), tag)); } If that's a cut-and-paste, then you seem to be short a */ on the second comment ... regards, tom lane ---(end of broadcast)--- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match - Utiba Pty Ltd This message has been scanned for viruses and dangerous content by Utiba mail server and is believed to be clean. - Utiba Pty Ltd This message has been scanned for viruses and dangerous content by Utiba mail server and is believed to be clean. ---(end of broadcast)--- TIP 2: you can get off all lists at once with the unregister command (send unregister YourEmailAddressHere to [EMAIL PROTECTED])