boolean bugs - Mailing list pgsql-bugs

From Robert B. Easter
Subject boolean bugs
Date
Msg-id 01010617312515.09559@comptechnews
Whole thread Raw
Responses Re: boolean bugs
List 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 by date:

Previous
From: Tom Lane
Date:
Subject: Re: Concat error in PL/pgsql
Next
From: Tom Lane
Date:
Subject: Re: boolean bugs