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  [EMAIL PROTECTED] ---------
-- CompTechNews Message Board http://www.comptechnews.com/ --
-- CompTechServ Tech Services http://www.comptechserv.com/ --
---------- http://www.comptechnews.com/~reaster/ ------------

Reply via email to