boolean bugs
От | Robert B. Easter |
---|---|
Тема | boolean bugs |
Дата | |
Msg-id | 01010617312515.09559@comptechnews обсуждение исходный текст |
Ответы |
Re: boolean bugs
|
Список | pgsql-bugs |
CREATE TABLE nulltest (nullfield); INSERT INTO nulltest VALUES (null); pgcvs=# select (nullfield = 'willbenull') is null from nulltest; ?column? ---------- t (1 row) pgcvs=# select (nullfield = 'willbenull') is true from nulltest; ?column? ---------- (1 row) pgcvs=# select (nullfield = 'willbenull') is false from nulltest; ?column? ---------- (1 row) The IS operator is supposed to return only TRUE or FALSE, never NULL. See ISO/IEC 9075-2:1999 6.30 <boolean value expression> pgcvs=# select (nullfield = 'willbenull') is (false is false) from nulltest; ERROR: parser: parse error at or near "(" The IS operator has a problem if right side is in parenthesis. pgcvs=# select (nullfield = 'willbenull') and (false is false) from nulltest; ?column? ---------- (1 row) AND and OR are ok with the paren, why not IS? The UNKNOWN literal is not understood. It should be synonymous with NULL: pgcvs=# select TRUE IS UNKNOWN; ERROR: parser: parse error at or near "unknown" pgcvs=# This should be the same as: pgcvs=# select TRUE IS NULL; ?column? ---------- f (1 row) See ISO/IEC 9075-2:1999 5.3 <literal> pgcvs=# select true is null; ?column? ---------- f (1 row) pgcvs=# select null is true; ?column? ---------- (1 row) This is strange. Just reversing the order changes the result. I'm using the cvs version. I think 7.0.3 has all this (wrong?) behavior too. -- -------- Robert B. Easter reaster@comptechnews.com --------- -- CompTechNews Message Board http://www.comptechnews.com/ -- -- CompTechServ Tech Services http://www.comptechserv.com/ -- ---------- http://www.comptechnews.com/~reaster/ ------------
В списке pgsql-bugs по дате отправления: