From: | Alexey Nalbat <alexey(at)price(dot)ru> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | c-function returning multiple rows |
Date: | 2001-04-24 15:55:32 |
Message-ID: | 01042420581800.12729@workshop.price.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs pgsql-interfaces |
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(at)beta:~$ cd lib/
postgres(at)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(at)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(at)beta:~/lib$ gcc -I /usr/local/include/pgsql -fpic -c myrand.c
postgres(at)beta:~/lib$ gcc -G -o myrand.so myrand.o
postgres(at)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
From | Date | Subject | |
---|---|---|---|
Next Message | asreddy | 2001-04-24 19:06:13 | Cannot Create plpqsql function! |
Previous Message | Vadim I. Passynkov | 2001-04-24 15:49:55 | Re: incompatible return type for netmask(inet) function between 7.0.3 and 7.1 |
From | Date | Subject | |
---|---|---|---|
Next Message | liam | 2001-04-24 16:13:36 | Re: libpq/INSERT |
Previous Message | Andy Champion | 2001-04-24 15:31:55 | libpq/INSERT |