patch fixing the old RETURN NEXT bug - Mailing list pgsql-patches

From Sergey E. Koposov
Subject patch fixing the old RETURN NEXT bug
Date
Msg-id Pine.LNX.4.44.0602121958090.15708-200000@lnfm1.sai.msu.ru
Whole thread Raw
Responses Re: patch fixing the old RETURN NEXT bug  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: patch fixing the old RETURN NEXT bug  (Neil Conway <neilc@samurai.com>)
Re: patch fixing the old RETURN NEXT bug  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-patches
Hello All,

I'm proposing the fix of this bug:
http://archives.postgresql.org/pgsql-hackers/2005-02/msg00498.php

The exact SQL code exposing the error:

----------

create table usno (ra real, dec real, bmag real, rmag real,ipix int8);
CREATE OR REPLACE FUNCTION xxx(refcursor) RETURNS refcursor AS '
DECLARE query varchar;
BEGIN
query = ''SELECT * FROM usno'';
OPEN $1 FOR EXECUTE query;
RETURN $1;
END;
' LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION yyy() RETURNS SETOF usno AS '
DECLARE rec record;
DECLARE cur refcursor;
BEGIN
cur=xxx(''curs_name'');
LOOP
        FETCH cur into rec;
        EXIT WHEN NOT FOUND;
        RETURN NEXT rec;
END LOOP;
RETURN;
END;
' LANGUAGE plpgsql;

insert into usno values(1,2,3,4);
select * from yyy();
alter table usno add column errbox box;
select * from yyy();
alter table usno drop column errbox;
select * from yyy();

-------

The problem with that is in fact in pl_exec.c in function
compatible_tupdesc(), which do not check for the deleted attributes.

The patch is attached.

Regards,
    Sergey

*****************************************************
Sergey E. Koposov
Max Planck Institute for Astronomy
Web: http://lnfm1.sai.msu.ru/~math
E-mail: math@sai.msu.ru


Attachment

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] Spaces in psql output (Was: FW: PGBuildfarm
Next
From: Tom Lane
Date:
Subject: Re: patch fixing the old RETURN NEXT bug