Re: [PATCHES] patch fixing the old RETURN NEXT bug
Added to TODO: o Fix problems with RETURN NEXT on tables with dropped/added columns after function creation http://archives.postgresql.org/pgsql-patches/2006-02/msg00165$ --- Sergey E. Koposov wrote: 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: [EMAIL PROTECTED] Content-Description: [ Attachment, skipping... ] ---(end of broadcast)--- TIP 6: explain analyze is your friend -- Bruce Momjian http://candle.pha.pa.us EnterpriseDBhttp://www.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + ---(end of broadcast)--- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly
Re: [PATCHES] patch fixing the old RETURN NEXT bug
Needs cleaning up. Your patch has been added to the PostgreSQL unapplied patches list at: http://momjian.postgresql.org/cgi-bin/pgpatches It will be applied as soon as one of the PostgreSQL committers reviews and approves it. --- Neil Conway wrote: On Sun, 2006-02-12 at 20:15 +0300, Sergey E. Koposov wrote: I'm proposing the fix of this bug: http://archives.postgresql.org/pgsql-hackers/2005-02/msg00498.php I think the suggested logic for compatible_tupdesc() is still wrong. For example, the patch rejects the following: create table usno (ra real, dec real, bmag real, rmag real, ipix int8); create function ret_next_check() returns setof usno as $$ declare r record; begin for r in select * from usno loop return next r; end loop; return; end; $$ language plpgsql; insert into usno values (1.0, 2.0, 3.0, 4.0, 5); select * from ret_next_check(); alter table usno drop column ipix; select * from ret_next_check(); -- fails, should succeed Also, this patch should include updates to the regression tests. -Neil ---(end of broadcast)--- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match -- Bruce Momjian http://candle.pha.pa.us SRA OSS, Inc. http://www.sraoss.com + If your life is a hard drive, Christ can be your backup. + ---(end of broadcast)--- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match
Re: [PATCHES] patch fixing the old RETURN NEXT bug
On Sun, 2006-02-12 at 20:15 +0300, Sergey E. Koposov wrote: I'm proposing the fix of this bug: http://archives.postgresql.org/pgsql-hackers/2005-02/msg00498.php I think the suggested logic for compatible_tupdesc() is still wrong. For example, the patch rejects the following: create table usno (ra real, dec real, bmag real, rmag real, ipix int8); create function ret_next_check() returns setof usno as $$ declare r record; begin for r in select * from usno loop return next r; end loop; return; end; $$ language plpgsql; insert into usno values (1.0, 2.0, 3.0, 4.0, 5); select * from ret_next_check(); alter table usno drop column ipix; select * from ret_next_check(); -- fails, should succeed Also, this patch should include updates to the regression tests. -Neil ---(end of broadcast)--- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match
Re: [PATCHES] patch fixing the old RETURN NEXT bug
On Sun, 12 Feb 2006, Tom Lane wrote: Sergey E. Koposov [EMAIL PROTECTED] writes: The problem with that is in fact in pl_exec.c in function compatible_tupdesc(), which do not check for the deleted attributes. Is that really the only problem? Tom, Are there any problems with that patch to not be applied ? (Sorry if I'm hurrying) Regards, Sergey * Sergey E. Koposov Max Planck Institute for Astronomy Web: http://lnfm1.sai.msu.ru/~math E-mail: [EMAIL PROTECTED] ---(end of broadcast)--- TIP 5: don't forget to increase your free space map settings
Re: [PATCHES] patch fixing the old RETURN NEXT bug
Sergey E. Koposov [EMAIL PROTECTED] writes: Are there any problems with that patch to not be applied ? Hasn't been reviewed yet ... see nearby discussions about shortage of patch reviewers ... (Sorry if I'm hurrying) At the moment it's not unusual for nontrivial patches to sit around for a month or two, unless they happen to attract special interest of one of the committers. regards, tom lane ---(end of broadcast)--- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq
[PATCHES] patch fixing the old RETURN NEXT bug
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: [EMAIL PROTECTED] Index: pl_exec.c === RCS file: /projects/cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v retrieving revision 1.160 diff -c -r1.160 pl_exec.c *** pl_exec.c 10 Jan 2006 18:50:43 - 1.160 --- pl_exec.c 12 Feb 2006 17:13:39 - *** *** 4469,4483 static bool compatible_tupdesc(TupleDesc td1, TupleDesc td2) { ! int i; ! if (td1-natts != td2-natts) ! return false; ! ! for (i = 0; i td1-natts; i++) { ! if (td1-attrs[i]-atttypid != td2-attrs[i]-atttypid) return false; } return true; --- 4469,4507 static bool compatible_tupdesc(TupleDesc td1, TupleDesc td2) { ! int i = 0, j = 0, natts1 = td1-natts, natts2 = td2-natts; ! while ((i natts1) (j natts2)) { ! /* We should skip the dropped columns */ ! if (td1-attrs[i]-attisdropped) ! { ! i++; ! continue; ! } ! if (td2-attrs[j]-attisdropped) ! { ! j++; ! continue; ! } ! ! if (td1-attrs[i]-atttypid != td2-attrs[j]-atttypid) ! { return false; + } + else + { + i++; + j++; + } + } + + while ((i natts1) (td1-attrs[i]-attisdropped)) i++; + while ((j natts2) (td2-attrs[j]-attisdropped)) j++; + + if ((i != natts1) || (j != natts2)) + { + return false; } return true; ---(end of broadcast)--- TIP 6: explain analyze is your friend
Re: [PATCHES] patch fixing the old RETURN NEXT bug
Sergey E. Koposov [EMAIL PROTECTED] writes: The problem with that is in fact in pl_exec.c in function compatible_tupdesc(), which do not check for the deleted attributes. Is that really the only problem? regards, tom lane ---(end of broadcast)--- TIP 2: Don't 'kill -9' the postmaster
Re: [PATCHES] patch fixing the old RETURN NEXT bug
On Sun, 12 Feb 2006, Tom Lane wrote: Sergey E. Koposov [EMAIL PROTECTED] writes: The problem with that is in fact in pl_exec.c in function compatible_tupdesc(), which do not check for the deleted attributes. Is that really the only problem? I cannot be completely sure in that, but at least the submitted patch eliminate the problem with the SQL code from my previous email. Regards, Sergey * Sergey E. Koposov Max Planck Institute for Astronomy Web: http://lnfm1.sai.msu.ru/~math E-mail: [EMAIL PROTECTED] ---(end of broadcast)--- TIP 2: Don't 'kill -9' the postmaster