FOUND with EXECUTE

Started by Brendan Jurdabout 18 years ago4 messages
#1Brendan Jurd
direvus@gmail.com

Hi hackers,

Is there a technical reason we do not set the value of FOUND when
executing a dynamic statement in plpgsql?

It seems surprising that FOUND is set by SELECT, PERFORM, UPDATE,
INSERT, DELETE, etc, *except* when those statements are invoked by
EXECUTE.

I had a brief look at the code in pl/plpgsql/src/pl_exec.c, and
couldn't see any screamingly obvious reasons not to set FOUND in
exec_stmt_dynexecute in much the same way we do in exec_stmt_execsql.

Thanks for your time,
BJ

#2Neil Conway
neilc@samurai.com
In reply to: Brendan Jurd (#1)
Re: FOUND with EXECUTE

On Tue, 2007-10-16 at 11:24 +1000, Brendan Jurd wrote:

Is there a technical reason we do not set the value of FOUND when
executing a dynamic statement in plpgsql?

See prior discussion:

http://archives.postgresql.org/pgsql-bugs/2004-10/msg00001.php

It would be easy enough to have EXECUTE modify FOUND, and that might
well be worth doing. Adding an "EVAL" concept would also be useful,
though, and would avoid changing EXECUTE's behavior in a way that might
break client apps.

-Neil

#3Brendan Jurd
direvus@gmail.com
In reply to: Neil Conway (#2)
Re: FOUND with EXECUTE

On 10/16/07, Neil Conway <neilc@samurai.com> wrote:

See prior discussion:

http://archives.postgresql.org/pgsql-bugs/2004-10/msg00001.php

Thanks for the link. I did search the archives but unfortunately
terms like 'found' and 'execute' generate a lot of unwanted matches =)

It would be easy enough to have EXECUTE modify FOUND, and that might
well be worth doing. Adding an "EVAL" concept would also be useful,
though, and would avoid changing EXECUTE's behavior in a way that might
break client apps.

Hm, it seems the only thing that would be broken is a function which
runs an ordinary statement, and then waits until *after* doing an
EXECUTE to check the value of FOUND. It's tough to imagine somebody
actually relying on this behaviour, and perhaps it's fair to say that
failure to check FOUND immediately after the statement you're
interested in is bad coding practice?

Regards,
BJ

#4Pavel Stehule
pavel.stehule@gmail.com
In reply to: Neil Conway (#2)
Re: FOUND with EXECUTE

2007/10/16, Neil Conway <neilc@samurai.com>:

On Tue, 2007-10-16 at 11:24 +1000, Brendan Jurd wrote:

Is there a technical reason we do not set the value of FOUND when
executing a dynamic statement in plpgsql?

See prior discussion:

http://archives.postgresql.org/pgsql-bugs/2004-10/msg00001.php

It would be easy enough to have EXECUTE modify FOUND, and that might
well be worth doing. Adding an "EVAL" concept would also be useful,
though, and would avoid changing EXECUTE's behavior in a way that might
break client apps.

-Neil

It's symply. But other execute statement only will more uglyze plpgsql.

use GET DIAGNOSTICS statement a wait for sql/psm

Pavel