From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Dmitry Samokhin <sdld(at)mail(dot)ru> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #4997: Expression evaluation rules |
Date: | 2009-08-20 09:42:06 |
Message-ID: | 162867790908200242q3ba9fccfu8c6475b29821ded8@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hello
it's not bug, but feature.
>
> CREATE OR REPLACE FUNCTION trg_mytable_after()
> RETURNS trigger AS
> $BODY$
> BEGIN
> IF TG_OP = 'UPDATE' OR TG_OP = 'DELETE' THEN
> IF (CASE WHEN TG_OP = 'DELETE' THEN TRUE ELSE OLD.a <> NEW.a END) THEN
> RAISE NOTICE 'OK!';
> END IF;
> END IF;
>
CASE expression isn't evaluated internally in plpgsql, but it is
transformed to SQL statement, that is evaluated by SQL procession. You
code is some like:
DECLARE result boolean;
BEGIN
IF TG_OP = 'UPDATE' OR TG_OP = 'DELETE' THEN
EXECUTE 'CASE WHEN $1 = 'DELETE' THEN true ELSE $2.a <> $3.a END'
USING TG_OP, OLD.a, OLD.b INTO result;
IF result THEN
RAISE NOTICE 'OK!';
Regards
Pavel Stehule
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry Samokhin | 2009-08-20 14:27:54 | Re: BUG #4997: Expression evaluation rules |
Previous Message | Pavel Stehule | 2009-08-20 09:33:15 | Re: BUG #4997: Expression evaluation rules |