boolean.sql 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. --
  2. -- BOOLEAN
  3. --
  4. --
  5. -- sanity check - if this fails go insane!
  6. --
  7. SELECT 1 AS one;
  8. -- ******************testing built-in type bool********************
  9. -- check bool input syntax
  10. SELECT true AS true;
  11. SELECT false AS false;
  12. SELECT bool 't' AS true;
  13. SELECT bool ' f ' AS false;
  14. SELECT bool 'true' AS true;
  15. SELECT bool 'test' AS error;
  16. SELECT bool 'false' AS false;
  17. SELECT bool 'foo' AS error;
  18. SELECT bool 'y' AS true;
  19. SELECT bool 'yes' AS true;
  20. SELECT bool 'yeah' AS error;
  21. SELECT bool 'n' AS false;
  22. SELECT bool 'no' AS false;
  23. SELECT bool 'nay' AS error;
  24. SELECT bool 'on' AS true;
  25. SELECT bool 'off' AS false;
  26. SELECT bool 'of' AS false;
  27. SELECT bool 'o' AS error;
  28. SELECT bool 'on_' AS error;
  29. SELECT bool 'off_' AS error;
  30. SELECT bool '1' AS true;
  31. SELECT bool '11' AS error;
  32. SELECT bool '0' AS false;
  33. SELECT bool '000' AS error;
  34. SELECT bool '' AS error;
  35. -- and, or, not in qualifications
  36. SELECT bool 't' or bool 'f' AS true;
  37. SELECT bool 't' and bool 'f' AS false;
  38. SELECT not bool 'f' AS true;
  39. SELECT bool 't' = bool 'f' AS false;
  40. SELECT bool 't' <> bool 'f' AS true;
  41. SELECT bool 't' > bool 'f' AS true;
  42. SELECT bool 't' >= bool 'f' AS true;
  43. SELECT bool 'f' < bool 't' AS true;
  44. SELECT bool 'f' <= bool 't' AS true;
  45. -- explicit casts to/from text
  46. SELECT 'TrUe'::text::boolean AS true, 'fAlse'::text::boolean AS false;
  47. SELECT ' true '::text::boolean AS true,
  48. ' FALSE'::text::boolean AS false;
  49. SELECT true::boolean::text AS true, false::boolean::text AS false;
  50. SELECT ' tru e '::text::boolean AS invalid; -- error
  51. SELECT ''::text::boolean AS invalid; -- error
  52. CREATE TABLE BOOLTBL1 (f1 bool);
  53. INSERT INTO BOOLTBL1 (f1) VALUES (bool 't');
  54. INSERT INTO BOOLTBL1 (f1) VALUES (bool 'True');
  55. INSERT INTO BOOLTBL1 (f1) VALUES (bool 'true');
  56. -- BOOLTBL1 should be full of true's at this point
  57. SELECT BOOLTBL1.* FROM BOOLTBL1;
  58. SELECT BOOLTBL1.*
  59. FROM BOOLTBL1
  60. WHERE f1 = bool 'true';
  61. SELECT BOOLTBL1.*
  62. FROM BOOLTBL1
  63. WHERE f1 <> bool 'false';
  64. SELECT BOOLTBL1.*
  65. FROM BOOLTBL1
  66. WHERE booleq(bool 'false', f1);
  67. INSERT INTO BOOLTBL1 (f1) VALUES (bool 'f');
  68. SELECT BOOLTBL1.*
  69. FROM BOOLTBL1
  70. WHERE f1 = bool 'false';
  71. CREATE TABLE BOOLTBL2 (f1 bool);
  72. INSERT INTO BOOLTBL2 (f1) VALUES (bool 'f');
  73. INSERT INTO BOOLTBL2 (f1) VALUES (bool 'false');
  74. INSERT INTO BOOLTBL2 (f1) VALUES (bool 'False');
  75. INSERT INTO BOOLTBL2 (f1) VALUES (bool 'FALSE');
  76. -- This is now an invalid expression
  77. -- For pre-v6.3 this evaluated to false - thomas 1997-10-23
  78. INSERT INTO BOOLTBL2 (f1)
  79. VALUES (bool 'XXX');
  80. -- BOOLTBL2 should be full of false's at this point
  81. SELECT BOOLTBL2.* FROM BOOLTBL2;
  82. SELECT BOOLTBL1.*, BOOLTBL2.*
  83. FROM BOOLTBL1, BOOLTBL2
  84. WHERE BOOLTBL2.f1 <> BOOLTBL1.f1;
  85. SELECT BOOLTBL1.*, BOOLTBL2.*
  86. FROM BOOLTBL1, BOOLTBL2
  87. WHERE boolne(BOOLTBL2.f1,BOOLTBL1.f1);
  88. SELECT BOOLTBL1.*, BOOLTBL2.*
  89. FROM BOOLTBL1, BOOLTBL2
  90. WHERE BOOLTBL2.f1 = BOOLTBL1.f1 and BOOLTBL1.f1 = bool 'false';
  91. SELECT BOOLTBL1.*, BOOLTBL2.*
  92. FROM BOOLTBL1, BOOLTBL2
  93. WHERE BOOLTBL2.f1 = BOOLTBL1.f1 or BOOLTBL1.f1 = bool 'true'
  94. ORDER BY BOOLTBL1.f1, BOOLTBL2.f1;
  95. --
  96. -- SQL syntax
  97. -- Try all combinations to ensure that we get nothing when we expect nothing
  98. -- - thomas 2000-01-04
  99. --
  100. SELECT f1
  101. FROM BOOLTBL1
  102. WHERE f1 IS TRUE;
  103. SELECT f1
  104. FROM BOOLTBL1
  105. WHERE f1 IS NOT FALSE;
  106. SELECT f1
  107. FROM BOOLTBL1
  108. WHERE f1 IS FALSE;
  109. SELECT f1
  110. FROM BOOLTBL1
  111. WHERE f1 IS NOT TRUE;
  112. SELECT f1
  113. FROM BOOLTBL2
  114. WHERE f1 IS TRUE;
  115. SELECT f1
  116. FROM BOOLTBL2
  117. WHERE f1 IS NOT FALSE;
  118. SELECT f1
  119. FROM BOOLTBL2
  120. WHERE f1 IS FALSE;
  121. SELECT f1
  122. FROM BOOLTBL2
  123. WHERE f1 IS NOT TRUE;
  124. --
  125. -- Tests for BooleanTest
  126. --
  127. CREATE TABLE BOOLTBL3 (d text, b bool, o int);
  128. INSERT INTO BOOLTBL3 (d, b, o) VALUES ('true', true, 1);
  129. INSERT INTO BOOLTBL3 (d, b, o) VALUES ('false', false, 2);
  130. INSERT INTO BOOLTBL3 (d, b, o) VALUES ('null', null, 3);
  131. SELECT
  132. d,
  133. b IS TRUE AS istrue,
  134. b IS NOT TRUE AS isnottrue,
  135. b IS FALSE AS isfalse,
  136. b IS NOT FALSE AS isnotfalse,
  137. b IS UNKNOWN AS isunknown,
  138. b IS NOT UNKNOWN AS isnotunknown
  139. FROM booltbl3 ORDER BY o;
  140. -- Test to make sure short-circuiting and NULL handling is
  141. -- correct. Use a table as source to prevent constant simplification
  142. -- to interfer.
  143. CREATE TABLE booltbl4(isfalse bool, istrue bool, isnul bool);
  144. INSERT INTO booltbl4 VALUES (false, true, null);
  145. \pset null '(null)'
  146. -- AND expression need to return null if there's any nulls and not all
  147. -- of the value are true
  148. SELECT istrue AND isnul AND istrue FROM booltbl4;
  149. SELECT istrue AND istrue AND isnul FROM booltbl4;
  150. SELECT isnul AND istrue AND istrue FROM booltbl4;
  151. SELECT isfalse AND isnul AND istrue FROM booltbl4;
  152. SELECT istrue AND isfalse AND isnul FROM booltbl4;
  153. SELECT isnul AND istrue AND isfalse FROM booltbl4;
  154. -- OR expression need to return null if there's any nulls and none
  155. -- of the value is true
  156. SELECT isfalse OR isnul OR isfalse FROM booltbl4;
  157. SELECT isfalse OR isfalse OR isnul FROM booltbl4;
  158. SELECT isnul OR isfalse OR isfalse FROM booltbl4;
  159. SELECT isfalse OR isnul OR istrue FROM booltbl4;
  160. SELECT istrue OR isfalse OR isnul FROM booltbl4;
  161. SELECT isnul OR istrue OR isfalse FROM booltbl4;
  162. --
  163. -- Clean up
  164. -- Many tables are retained by the regression test, but these do not seem
  165. -- particularly useful so just get rid of them for now.
  166. -- - thomas 1997-11-30
  167. --
  168. DROP TABLE BOOLTBL1;
  169. DROP TABLE BOOLTBL2;
  170. DROP TABLE BOOLTBL3;
  171. DROP TABLE BOOLTBL4;