c-function returning multiple rows
От | Alexey Nalbat |
---|---|
Тема | c-function returning multiple rows |
Дата | |
Msg-id | 01042420581800.12729@workshop.price.ru обсуждение исходный текст |
Ответы |
Re: c-function returning multiple rows
|
Список | pgsql-bugs |
Hello, I encountered the following problem ( at PostgreSQL 7.1 on Solaris i386 ) with compiling c-function returning multiple rows. Here is a transcript. +++ +++ postgres@beta:~$ cd lib/ postgres@beta:~/lib$ cat <<! >myrand.c > #include <stdlib.h> > #include "postgres.h" > #include "fmgr.h" > #include "nodes/execnodes.h" > > PG_FUNCTION_INFO_V1(myrand); > > Datum > myrand(PG_FUNCTION_ARGS) > { > if ( 100*rand() > RAND_MAX ) > { > fcinfo->resultinfo->isDone = ExprMultipleResult; > PG_RETURN_INT32( PG_GETARG_INT32(0)*rand()/RAND_MAX ); > } > else > { > fcinfo->resultinfo->isDone = ExprEndResult; > PG_RETURN_NULL(); > } > } > ! postgres@beta:~/lib$ gcc -I /usr/local/include/pgsql -fpic -c myrand.c myrand.c: In function `triple': myrand.c:13: structure has no member named `isDone' myrand.c:18: structure has no member named `isDone' +++ +++ I digged into sources and supposed that line 61 in fmgr.h might be 'struct ReturnSetInfo *resultinfo;' instead of 'struct Node *resultinfo;'. But I'm not sure if it is correct. After changing this line in file fmgr.h it became working. Here is a transcript. +++ +++ postgres@beta:~/lib$ gcc -I /usr/local/include/pgsql -fpic -c myrand.c postgres@beta:~/lib$ gcc -G -o myrand.so myrand.o postgres@beta:~/lib$ psql Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit postgres=# CREATE FUNCTION myrand(int4) RETURNS SETOF int4 AS '/var/local/lib/pgsql/lib/myrand.so' LANGUAGE 'C'; CREATE postgres=# SELECT myrand(50); ?column? ---------- 26 46 30 29 40 8 22 38 23 18 2 43 24 44 22 46 48 15 (18 rows) +++ +++ -- WBR, Alexey Nalbat
В списке pgsql-bugs по дате отправления: