plpgsql and control structures

Started by Nickabout 17 years ago2 messagesgeneral
Jump to latest
#1Nick
nboutelier@gmail.com

I noticed that if I use...

IF (TG_OP = 'DELETE' AND OLD.myColumn) THEN
-- Do something
END IF;

when an insert happens, I get an error that 'OLD' has not been
assigned. I would of thought that the control structure would just
ignored the rest of the 'if' statement if the first part (TG_OP) was
false.

Does this mean I have to branch out my control structures if I want
better speed? If the first part of the 'if' is rarely true, then I
might as well put the second control within the first.

-Nick

#2Martijn van Oosterhout
kleptog@svana.org
In reply to: Nick (#1)
Re: plpgsql and control structures

On Fri, Jan 30, 2009 at 02:08:19PM -0800, Nick Boutelier wrote:

I noticed that if I use...

IF (TG_OP = 'DELETE' AND OLD.myColumn) THEN
-- Do something
END IF;

when an insert happens, I get an error that 'OLD' has not been
assigned. I would of thought that the control structure would just
ignored the rest of the 'if' statement if the first part (TG_OP) was
false.

SQL is not C, AND and OR in if statements do not short-circuit.

Does this mean I have to branch out my control structures if I want
better speed? If the first part of the 'if' is rarely true, then I
might as well put the second control within the first.

Nothing to do with speed, the entire expression needs to be parsable at
the point it is executed. So in your above example you need to nest two
if statements.

Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Please line up in a tree and maintain the heap invariant while
boarding. Thank you for flying nlogn airlines.