Fix use-after-free in parallel_vacuum_reset_dead_items
[pgsql.git] / src / test / regress / expected / boolean.out
blob0e99eb7ffc0012bbad02eea138d4cb9954073223
1 --
2 -- BOOLEAN
3 --
4 --
5 -- sanity check - if this fails go insane!
6 --
7 SELECT 1 AS one;
8  one 
9 -----
10    1
11 (1 row)
13 -- ******************testing built-in type bool********************
14 -- check bool input syntax
15 SELECT true AS true;
16  true 
17 ------
18  t
19 (1 row)
21 SELECT false AS false;
22  false 
23 -------
24  f
25 (1 row)
27 SELECT bool 't' AS true;
28  true 
29 ------
30  t
31 (1 row)
33 SELECT bool '   f           ' AS false;
34  false 
35 -------
36  f
37 (1 row)
39 SELECT bool 'true' AS true;
40  true 
41 ------
42  t
43 (1 row)
45 SELECT bool 'test' AS error;
46 ERROR:  invalid input syntax for type boolean: "test"
47 LINE 1: SELECT bool 'test' AS error;
48                     ^
49 SELECT bool 'false' AS false;
50  false 
51 -------
52  f
53 (1 row)
55 SELECT bool 'foo' AS error;
56 ERROR:  invalid input syntax for type boolean: "foo"
57 LINE 1: SELECT bool 'foo' AS error;
58                     ^
59 SELECT bool 'y' AS true;
60  true 
61 ------
62  t
63 (1 row)
65 SELECT bool 'yes' AS true;
66  true 
67 ------
68  t
69 (1 row)
71 SELECT bool 'yeah' AS error;
72 ERROR:  invalid input syntax for type boolean: "yeah"
73 LINE 1: SELECT bool 'yeah' AS error;
74                     ^
75 SELECT bool 'n' AS false;
76  false 
77 -------
78  f
79 (1 row)
81 SELECT bool 'no' AS false;
82  false 
83 -------
84  f
85 (1 row)
87 SELECT bool 'nay' AS error;
88 ERROR:  invalid input syntax for type boolean: "nay"
89 LINE 1: SELECT bool 'nay' AS error;
90                     ^
91 SELECT bool 'on' AS true;
92  true 
93 ------
94  t
95 (1 row)
97 SELECT bool 'off' AS false;
98  false 
99 -------
101 (1 row)
103 SELECT bool 'of' AS false;
104  false 
105 -------
107 (1 row)
109 SELECT bool 'o' AS error;
110 ERROR:  invalid input syntax for type boolean: "o"
111 LINE 1: SELECT bool 'o' AS error;
112                     ^
113 SELECT bool 'on_' AS error;
114 ERROR:  invalid input syntax for type boolean: "on_"
115 LINE 1: SELECT bool 'on_' AS error;
116                     ^
117 SELECT bool 'off_' AS error;
118 ERROR:  invalid input syntax for type boolean: "off_"
119 LINE 1: SELECT bool 'off_' AS error;
120                     ^
121 SELECT bool '1' AS true;
122  true 
123 ------
125 (1 row)
127 SELECT bool '11' AS error;
128 ERROR:  invalid input syntax for type boolean: "11"
129 LINE 1: SELECT bool '11' AS error;
130                     ^
131 SELECT bool '0' AS false;
132  false 
133 -------
135 (1 row)
137 SELECT bool '000' AS error;
138 ERROR:  invalid input syntax for type boolean: "000"
139 LINE 1: SELECT bool '000' AS error;
140                     ^
141 SELECT bool '' AS error;
142 ERROR:  invalid input syntax for type boolean: ""
143 LINE 1: SELECT bool '' AS error;
144                     ^
145 -- Also try it with non-error-throwing API
146 SELECT pg_input_is_valid('true', 'bool');
147  pg_input_is_valid 
148 -------------------
150 (1 row)
152 SELECT pg_input_is_valid('asdf', 'bool');
153  pg_input_is_valid 
154 -------------------
156 (1 row)
158 SELECT * FROM pg_input_error_info('junk', 'bool');
159                     message                    | detail | hint | sql_error_code 
160 -----------------------------------------------+--------+------+----------------
161  invalid input syntax for type boolean: "junk" |        |      | 22P02
162 (1 row)
164 -- and, or, not in qualifications
165 SELECT bool 't' or bool 'f' AS true;
166  true 
167 ------
169 (1 row)
171 SELECT bool 't' and bool 'f' AS false;
172  false 
173 -------
175 (1 row)
177 SELECT not bool 'f' AS true;
178  true 
179 ------
181 (1 row)
183 SELECT bool 't' = bool 'f' AS false;
184  false 
185 -------
187 (1 row)
189 SELECT bool 't' <> bool 'f' AS true;
190  true 
191 ------
193 (1 row)
195 SELECT bool 't' > bool 'f' AS true;
196  true 
197 ------
199 (1 row)
201 SELECT bool 't' >= bool 'f' AS true;
202  true 
203 ------
205 (1 row)
207 SELECT bool 'f' < bool 't' AS true;
208  true 
209 ------
211 (1 row)
213 SELECT bool 'f' <= bool 't' AS true;
214  true 
215 ------
217 (1 row)
219 -- explicit casts to/from text
220 SELECT 'TrUe'::text::boolean AS true, 'fAlse'::text::boolean AS false;
221  true | false 
222 ------+-------
223  t    | f
224 (1 row)
226 SELECT '    true   '::text::boolean AS true,
227        '     FALSE'::text::boolean AS false;
228  true | false 
229 ------+-------
230  t    | f
231 (1 row)
233 SELECT true::boolean::text AS true, false::boolean::text AS false;
234  true | false 
235 ------+-------
236  true | false
237 (1 row)
239 SELECT '  tru e '::text::boolean AS invalid;    -- error
240 ERROR:  invalid input syntax for type boolean: "  tru e "
241 SELECT ''::text::boolean AS invalid;            -- error
242 ERROR:  invalid input syntax for type boolean: ""
243 CREATE TABLE BOOLTBL1 (f1 bool);
244 INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
245 INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
246 INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
247 -- BOOLTBL1 should be full of true's at this point
248 SELECT BOOLTBL1.* FROM BOOLTBL1;
249  f1 
250 ----
254 (3 rows)
256 SELECT BOOLTBL1.*
257    FROM BOOLTBL1
258    WHERE f1 = bool 'true';
259  f1 
260 ----
264 (3 rows)
266 SELECT BOOLTBL1.*
267    FROM BOOLTBL1
268    WHERE f1 <> bool 'false';
269  f1 
270 ----
274 (3 rows)
276 SELECT BOOLTBL1.*
277    FROM BOOLTBL1
278    WHERE booleq(bool 'false', f1);
279  f1 
280 ----
281 (0 rows)
283 INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
284 SELECT BOOLTBL1.*
285    FROM BOOLTBL1
286    WHERE f1 = bool 'false';
287  f1 
288 ----
290 (1 row)
292 CREATE TABLE BOOLTBL2 (f1 bool);
293 INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
294 INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
295 INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
296 INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
297 -- This is now an invalid expression
298 -- For pre-v6.3 this evaluated to false - thomas 1997-10-23
299 INSERT INTO BOOLTBL2 (f1)
300    VALUES (bool 'XXX');
301 ERROR:  invalid input syntax for type boolean: "XXX"
302 LINE 2:    VALUES (bool 'XXX');
303                         ^
304 -- BOOLTBL2 should be full of false's at this point
305 SELECT BOOLTBL2.* FROM BOOLTBL2;
306  f1 
307 ----
312 (4 rows)
314 SELECT BOOLTBL1.*, BOOLTBL2.*
315    FROM BOOLTBL1, BOOLTBL2
316    WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
317  f1 | f1 
318 ----+----
319  t  | f
320  t  | f
321  t  | f
322  t  | f
323  t  | f
324  t  | f
325  t  | f
326  t  | f
327  t  | f
328  t  | f
329  t  | f
330  t  | f
331 (12 rows)
333 SELECT BOOLTBL1.*, BOOLTBL2.*
334    FROM BOOLTBL1, BOOLTBL2
335    WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
336  f1 | f1 
337 ----+----
338  t  | f
339  t  | f
340  t  | f
341  t  | f
342  t  | f
343  t  | f
344  t  | f
345  t  | f
346  t  | f
347  t  | f
348  t  | f
349  t  | f
350 (12 rows)
352 SELECT BOOLTBL1.*, BOOLTBL2.*
353    FROM BOOLTBL1, BOOLTBL2
354    WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false';
355  f1 | f1 
356 ----+----
357  f  | f
358  f  | f
359  f  | f
360  f  | f
361 (4 rows)
363 SELECT BOOLTBL1.*, BOOLTBL2.*
364    FROM BOOLTBL1, BOOLTBL2
365    WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
366    ORDER BY BOOLTBL1.f1, BOOLTBL2.f1;
367  f1 | f1 
368 ----+----
369  f  | f
370  f  | f
371  f  | f
372  f  | f
373  t  | f
374  t  | f
375  t  | f
376  t  | f
377  t  | f
378  t  | f
379  t  | f
380  t  | f
381  t  | f
382  t  | f
383  t  | f
384  t  | f
385 (16 rows)
388 -- SQL syntax
389 -- Try all combinations to ensure that we get nothing when we expect nothing
390 -- - thomas 2000-01-04
392 SELECT f1
393    FROM BOOLTBL1
394    WHERE f1 IS TRUE;
395  f1 
396 ----
400 (3 rows)
402 SELECT f1
403    FROM BOOLTBL1
404    WHERE f1 IS NOT FALSE;
405  f1 
406 ----
410 (3 rows)
412 SELECT f1
413    FROM BOOLTBL1
414    WHERE f1 IS FALSE;
415  f1 
416 ----
418 (1 row)
420 SELECT f1
421    FROM BOOLTBL1
422    WHERE f1 IS NOT TRUE;
423  f1 
424 ----
426 (1 row)
428 SELECT f1
429    FROM BOOLTBL2
430    WHERE f1 IS TRUE;
431  f1 
432 ----
433 (0 rows)
435 SELECT f1
436    FROM BOOLTBL2
437    WHERE f1 IS NOT FALSE;
438  f1 
439 ----
440 (0 rows)
442 SELECT f1
443    FROM BOOLTBL2
444    WHERE f1 IS FALSE;
445  f1 
446 ----
451 (4 rows)
453 SELECT f1
454    FROM BOOLTBL2
455    WHERE f1 IS NOT TRUE;
456  f1 
457 ----
462 (4 rows)
465 -- Tests for BooleanTest
467 CREATE TABLE BOOLTBL3 (d text, b bool, o int);
468 INSERT INTO BOOLTBL3 (d, b, o) VALUES ('true', true, 1);
469 INSERT INTO BOOLTBL3 (d, b, o) VALUES ('false', false, 2);
470 INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3);
471 SELECT
472     d,
473     b IS TRUE AS istrue,
474     b IS NOT TRUE AS isnottrue,
475     b IS FALSE AS isfalse,
476     b IS NOT FALSE AS isnotfalse,
477     b IS UNKNOWN AS isunknown,
478     b IS NOT UNKNOWN AS isnotunknown
479 FROM booltbl3 ORDER BY o;
480    d   | istrue | isnottrue | isfalse | isnotfalse | isunknown | isnotunknown 
481 -------+--------+-----------+---------+------------+-----------+--------------
482  true  | t      | f         | f       | t          | f         | t
483  false | f      | t         | t       | f          | f         | t
484  null  | f      | t         | f       | t          | t         | f
485 (3 rows)
487 -- Test to make sure short-circuiting and NULL handling is
488 -- correct. Use a table as source to prevent constant simplification
489 -- from interfering.
490 CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool);
491 INSERT INTO booltbl4 VALUES (false, true, null);
492 \pset null '(null)'
493 -- AND expression need to return null if there's any nulls and not all
494 -- of the value are true
495 SELECT istrue AND isnul AND istrue FROM booltbl4;
496  ?column? 
497 ----------
498  (null)
499 (1 row)
501 SELECT istrue AND istrue AND isnul FROM booltbl4;
502  ?column? 
503 ----------
504  (null)
505 (1 row)
507 SELECT isnul AND istrue AND istrue FROM booltbl4;
508  ?column? 
509 ----------
510  (null)
511 (1 row)
513 SELECT isfalse AND isnul AND istrue FROM booltbl4;
514  ?column? 
515 ----------
517 (1 row)
519 SELECT istrue AND isfalse AND isnul FROM booltbl4;
520  ?column? 
521 ----------
523 (1 row)
525 SELECT isnul AND istrue AND isfalse FROM booltbl4;
526  ?column? 
527 ----------
529 (1 row)
531 -- OR expression need to return null if there's any nulls and none
532 -- of the value is true
533 SELECT isfalse OR isnul OR isfalse FROM booltbl4;
534  ?column? 
535 ----------
536  (null)
537 (1 row)
539 SELECT isfalse OR isfalse OR isnul FROM booltbl4;
540  ?column? 
541 ----------
542  (null)
543 (1 row)
545 SELECT isnul OR isfalse OR isfalse FROM booltbl4;
546  ?column? 
547 ----------
548  (null)
549 (1 row)
551 SELECT isfalse OR isnul OR istrue FROM booltbl4;
552  ?column? 
553 ----------
555 (1 row)
557 SELECT istrue OR isfalse OR isnul FROM booltbl4;
558  ?column? 
559 ----------
561 (1 row)
563 SELECT isnul OR istrue OR isfalse FROM booltbl4;
564  ?column? 
565 ----------
567 (1 row)
569 -- Casts
570 SELECT 0::boolean;
571  bool 
572 ------
574 (1 row)
576 SELECT 1::boolean;
577  bool 
578 ------
580 (1 row)
582 SELECT 2::boolean;
583  bool 
584 ------
586 (1 row)
589 -- Clean up
590 -- Many tables are retained by the regression test, but these do not seem
591 --  particularly useful so just get rid of them for now.
592 --  - thomas 1997-11-30
594 DROP TABLE  BOOLTBL1;
595 DROP TABLE  BOOLTBL2;
596 DROP TABLE  BOOLTBL3;
597 DROP TABLE  BOOLTBL4;