Thread: PLPGSQL bug in implicit SELECT
After more than 3 months of hard testing I found a small bug in PLPGSQL. (It works _too_ fine due to your excellent work... :-) Thanks!) Consider this function: CREATE FUNCTION testfunc () RETURNS int4 AS ' declare ret int4; begin ret := column1 FROM table WHERE column2 LIKE ''%anything%''ORDER BY column3 LIMIT 1; return ret; end; ' LANGUAGE 'PLPGSQL'; Unfortunately I'm getting testdb=# select testfunc(); ERROR: query "SELECT column1 FROM table WHERE column2 LIKE '%anything%' ORDER BY column3 LIMIT 1" returned more than one column In psql there is no such problem. My PostgreSQL version is "PostgreSQL 7.1.1 on i686-pc-linux-gnu, compiled by GCC egcs-2.91.66" patched with four small patches (in fact I almost have a 7.1.2). My workaround for the test function is: CREATE FUNCTION testfunc () RETURNS int4 AS ' declare ret int4; begin SELECT column1 into ret FROM table WHERE column2 LIKE ''%anything%''ORDER BY column3 LIMIT 1; return ret; end; ' LANGUAGE 'PLPGSQL'; Is this bug a reported one? Regards, Zoltan -- Kov\'acs, Zolt\'an kovacsz@pc10.radnoti-szeged.sulinet.hu http://www.math.u-szeged.hu/~kovzol ftp://pc10.radnoti-szeged.sulinet.hu/home/kovacsz
Kovacs Zoltan <kovacsz@pc10.radnoti-szeged.sulinet.hu> writes: > Unfortunately I'm getting > testdb=# select testfunc(); > ERROR: query "SELECT column1 FROM table WHERE column2 LIKE '%anything%' > ORDER BY column3 LIMIT 1" returned more than one column This appears fixed in current sources. I believe the relevant bugfix is: 2001-05-27 16:48 tgl * src/: backend/executor/execJunk.c, backend/executor/execMain.c,include/executor/executor.h, include/nodes/execnodes.h:When usinga junkfilter, the output tuple should NOT be stored back into thesame tuple slot thatthe raw tuple came from, because that slot hasthe wrong tuple descriptor. Store it into its own slot with thecorrectdescriptor, instead. This repairs problems with SPIfunctions seeing inappropriate tuple descriptors --- for example,plpgsqlcode failing to cope with SELECT FOR UPDATE. regards, tom lane