[prev in list] [next in list] [prev in thread] [next in thread]
List: pgsql-bugs
Subject: Re: [BUGS] BUG #6128: A boolean variable doesn't evaluate properly in
From: Robert Haas <robertmhaas () gmail ! com>
Date: 2011-07-22 21:30:40
Message-ID: CA+TgmobetS_LA2p3c631GzOLfuLyr1sp8CZOTFSqyVjRt4YrtA () mail ! gmail ! com
[Download RAW message or body]
On Thu, Jul 21, 2011 at 2:48 PM, <danielb@megasystems.us> wrote:
> I wrote some code in a PLPGSQL function to generate a printout string of
> some information. Basically, I create a string of printed characters, which
> my calling program will then print out...
>
> I wrote an IF conditional to generate different printing based on what input
> data I got...
>
> I declared the variable "put_the_in_city_online boolean := false" in my
> declaration section. I then had the following IF conditional inside a FOR
> LOOP structure with a record variable called "rec"...
>
> -- If the applicant has electric services,
> -- then we display a line indicating such...
> IF (rec.has_electric = 'Y') THEN
> IF (put_the_in_city_online = FALSE) THEN
> application_page_01 := application_page_01 ||
> ' SERVICES: ELECTRIC ' ||
> rec.electric_rate_category || ' '
> || rec.in_or_out_of_city || end_of_line;
>
> put_the_in_city_online := true;
> ELSE
> application_page_01 := application_page_01 ||
> ' ELECTRIC ' ||
> rec.electric_rate_category || end_of_line;
> END IF;
> END IF;
>
> The bug occurs in the execution of these statements. I enter inside the
> first IF statement no problem, but the 2nd IF statement executes the
> opposite of what it should. The ELSE code is executing when the IF code
> should be executing!
>
> For some reason, POSTGRESQL does not evaluate ((put_the_in_city_online =
> FALSE) = true) correctly. This statement is true, but corresponding
> statements are not executed; the statements for ((put_the_in_city_online =
> FALSE) = false) end up being executed!
>
> I don't see any flaw in my logic. Postgresql doesn't seem to work correctly
> based on logic!
I can't help wondering if you are somehow getting bitten by the
strange semantics of NULL comparisons. Note that:
IF (something_that_is_null) THEN
...
END IF;
...will not trigger the if, and:
IF (something_that_is_null = false) THEN
...
END IF;
won't either.
--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic