123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- --
- -- BOOLEAN
- --
- --
- -- sanity check - if this fails go insane!
- --
- SELECT 1 AS one;
- one
- -----
- 1
- (1 row)
- -- ******************testing built-in type bool********************
- -- check bool input syntax
- SELECT true AS true;
- true
- ------
- t
- (1 row)
- SELECT false AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 't' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool ' f ' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'true' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'test' AS error;
- ERROR: invalid input syntax for type boolean: "test"
- LINE 1: SELECT bool 'test' AS error;
- ^
- SELECT bool 'false' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'foo' AS error;
- ERROR: invalid input syntax for type boolean: "foo"
- LINE 1: SELECT bool 'foo' AS error;
- ^
- SELECT bool 'y' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'yes' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'yeah' AS error;
- ERROR: invalid input syntax for type boolean: "yeah"
- LINE 1: SELECT bool 'yeah' AS error;
- ^
- SELECT bool 'n' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'no' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'nay' AS error;
- ERROR: invalid input syntax for type boolean: "nay"
- LINE 1: SELECT bool 'nay' AS error;
- ^
- SELECT bool 'on' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'off' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'of' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 'o' AS error;
- ERROR: invalid input syntax for type boolean: "o"
- LINE 1: SELECT bool 'o' AS error;
- ^
- SELECT bool 'on_' AS error;
- ERROR: invalid input syntax for type boolean: "on_"
- LINE 1: SELECT bool 'on_' AS error;
- ^
- SELECT bool 'off_' AS error;
- ERROR: invalid input syntax for type boolean: "off_"
- LINE 1: SELECT bool 'off_' AS error;
- ^
- SELECT bool '1' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool '11' AS error;
- ERROR: invalid input syntax for type boolean: "11"
- LINE 1: SELECT bool '11' AS error;
- ^
- SELECT bool '0' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool '000' AS error;
- ERROR: invalid input syntax for type boolean: "000"
- LINE 1: SELECT bool '000' AS error;
- ^
- SELECT bool '' AS error;
- ERROR: invalid input syntax for type boolean: ""
- LINE 1: SELECT bool '' AS error;
- ^
- -- and, or, not in qualifications
- SELECT bool 't' or bool 'f' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 't' and bool 'f' AS false;
- false
- -------
- f
- (1 row)
- SELECT not bool 'f' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 't' = bool 'f' AS false;
- false
- -------
- f
- (1 row)
- SELECT bool 't' <> bool 'f' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 't' > bool 'f' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 't' >= bool 'f' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'f' < bool 't' AS true;
- true
- ------
- t
- (1 row)
- SELECT bool 'f' <= bool 't' AS true;
- true
- ------
- t
- (1 row)
- -- explicit casts to/from text
- SELECT 'TrUe'::text::boolean AS true, 'fAlse'::text::boolean AS false;
- true | false
- ------+-------
- t | f
- (1 row)
- SELECT ' true '::text::boolean AS true,
- ' FALSE'::text::boolean AS false;
- true | false
- ------+-------
- t | f
- (1 row)
- SELECT true::boolean::text AS true, false::boolean::text AS false;
- true | false
- ------+-------
- true | false
- (1 row)
- SELECT ' tru e '::text::boolean AS invalid; -- error
- ERROR: invalid input syntax for type boolean: " tru e "
- SELECT ''::text::boolean AS invalid; -- error
- ERROR: invalid input syntax for type boolean: ""
- CREATE TABLE BOOLTBL1 (f1 bool);
- INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
- INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
- INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
- -- BOOLTBL1 should be full of true's at this point
- SELECT BOOLTBL1.* FROM BOOLTBL1;
- f1
- ----
- t
- t
- t
- (3 rows)
- SELECT BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'true';
- f1
- ----
- t
- t
- t
- (3 rows)
- SELECT BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 <> bool 'false';
- f1
- ----
- t
- t
- t
- (3 rows)
- SELECT BOOLTBL1.*
- FROM BOOLTBL1
- WHERE booleq(bool 'false', f1);
- f1
- ----
- (0 rows)
- INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
- SELECT BOOLTBL1.*
- FROM BOOLTBL1
- WHERE f1 = bool 'false';
- f1
- ----
- f
- (1 row)
- CREATE TABLE BOOLTBL2 (f1 bool);
- INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
- INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
- INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
- INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
- -- This is now an invalid expression
- -- For pre-v6.3 this evaluated to false - thomas 1997-10-23
- INSERT INTO BOOLTBL2 (f1)
- VALUES (bool 'XXX');
- ERROR: invalid input syntax for type boolean: "XXX"
- LINE 2: VALUES (bool 'XXX');
- ^
- -- BOOLTBL2 should be full of false's at this point
- SELECT BOOLTBL2.* FROM BOOLTBL2;
- f1
- ----
- f
- f
- f
- f
- (4 rows)
- --
- -- SQL syntax
- -- Try all combinations to ensure that we get nothing when we expect nothing
- -- - thomas 2000-01-04
- --
- SELECT f1
- FROM BOOLTBL1
- WHERE f1 IS TRUE;
- f1
- ----
- t
- t
- t
- (3 rows)
- SELECT f1
- FROM BOOLTBL1
- WHERE f1 IS NOT FALSE;
- f1
- ----
- t
- t
- t
- (3 rows)
- SELECT f1
- FROM BOOLTBL1
- WHERE f1 IS FALSE;
- f1
- ----
- f
- (1 row)
- SELECT f1
- FROM BOOLTBL1
- WHERE f1 IS NOT TRUE;
- f1
- ----
- f
- (1 row)
- SELECT f1
- FROM BOOLTBL2
- WHERE f1 IS TRUE;
- f1
- ----
- (0 rows)
- SELECT f1
- FROM BOOLTBL2
- WHERE f1 IS NOT FALSE;
- f1
- ----
- (0 rows)
- SELECT f1
- FROM BOOLTBL2
- WHERE f1 IS FALSE;
- f1
- ----
- f
- f
- f
- f
- (4 rows)
- SELECT f1
- FROM BOOLTBL2
- WHERE f1 IS NOT TRUE;
- f1
- ----
- f
- f
- f
- f
- (4 rows)
- --
- -- Tests for BooleanTest
- --
- CREATE TABLE BOOLTBL3 (d text, b bool, o int);
- INSERT INTO BOOLTBL3 (d, b, o) VALUES ('true', true, 1);
- INSERT INTO BOOLTBL3 (d, b, o) VALUES ('false', false, 2);
- INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3);
- -- Test to make sure short-circuiting and NULL handling is
- -- correct. Use a table as source to prevent constant simplification
- -- to interfer.
- CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool);
- INSERT INTO booltbl4 VALUES (false, true, null);
- \pset null '(null)'
- -- AND expression need to return null if there's any nulls and not all
- -- of the value are true
- SELECT istrue AND isnul AND istrue FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT istrue AND istrue AND isnul FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT isnul AND istrue AND istrue FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT isfalse AND isnul AND istrue FROM booltbl4;
- ?column?
- ----------
- f
- (1 row)
- SELECT istrue AND isfalse AND isnul FROM booltbl4;
- ?column?
- ----------
- f
- (1 row)
- SELECT isnul AND istrue AND isfalse FROM booltbl4;
- ?column?
- ----------
- f
- (1 row)
- -- OR expression need to return null if there's any nulls and none
- -- of the value is true
- SELECT isfalse OR isnul OR isfalse FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT isfalse OR isfalse OR isnul FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT isnul OR isfalse OR isfalse FROM booltbl4;
- ?column?
- ----------
- (null)
- (1 row)
- SELECT isfalse OR isnul OR istrue FROM booltbl4;
- ?column?
- ----------
- t
- (1 row)
- SELECT istrue OR isfalse OR isnul FROM booltbl4;
- ?column?
- ----------
- t
- (1 row)
- SELECT isnul OR istrue OR isfalse FROM booltbl4;
- ?column?
- ----------
- t
- (1 row)
- --
- -- Clean up
- -- Many tables are retained by the regression test, but these do not seem
- -- particularly useful so just get rid of them for now.
- -- - thomas 1997-11-30
- --
- DROP TABLE BOOLTBL1;
- DROP TABLE BOOLTBL2;
- DROP TABLE BOOLTBL3;
|