From: | Oisin Glynn <me(at)oisinglynn(dot)com> |
---|---|
To: | Daniel CAUNE <d(dot)caune(at)free(dot)fr> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Evaluation of if conditions |
Date: | 2006-09-06 23:04:36 |
Message-ID: | 44FF5404.2010604@oisinglynn.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Daniel CAUNE wrote:
> Hi,
>
> How does the IF statement evaluate conditions? Does it evaluate conditions
> following their declaration order from left to right? In case of
> or-conditions, does the IF statement stop evaluating conditions whenever a
> first or-condition is true?
>
> The following snippet seems to be invalid, which let me think that PL/PGSQL
> evaluates all the conditions:
>
> IF (TG_OP = 'INSERT') OR
> (OLD.bar = ...) THEN
> statement
> END IF;
>
> Should be rewritten as (for example):
>
> IF (TG_OP = 'INSERT') THEN
> statement
> ELSIF (OLD.bar = ...) THEN
> statement
> END IF;
>
>
> Regards,
>
> --
> Daniel
>
>
> ---------------------------(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
>
The following is working fine for me on 8.1.x on Windows. I am not sure
what order it is evaluating the if statement in but it is working correctly.
Oisin
CREATE OR REPLACE FUNCTION zfunc_testor(bool, bool)
RETURNS "varchar" AS
$BODY$DECLARE
v_1 boolean;
v_2 boolean;
BEGIN
v_1 :=$1;
v_2 := $2;
if (v_1 = TRUE) OR (v_2 = TRUE) then
return 'At least 1 true';
else
return 'neither true';
end if;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION zfunc_testor(bool, bool) OWNER TO postgres;
From | Date | Subject | |
---|---|---|---|
Next Message | Joe | 2006-09-06 23:40:17 | Re: Evaluation of if conditions |
Previous Message | Gregory S. Williamson | 2006-09-06 23:02:30 | Re: Evaluation of if conditions |