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/ ------------