c-function returning multiple rows

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

Responses

Browse pgsql-bugs by date

  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

Browse pgsql-interfaces by date

  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