select_implicit.out 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. --
  2. -- SELECT_IMPLICIT
  3. -- Test cases for queries with ordering terms missing from the target list.
  4. -- This used to be called "junkfilter.sql".
  5. -- The parser uses the term "resjunk" to handle these cases.
  6. -- - thomas 1998-07-09
  7. --
  8. -- load test data
  9. CREATE TABLE test_missing_target (a int, b int, c char(8), d char);
  10. INSERT INTO test_missing_target VALUES (0, 1, 'XXXX', 'A');
  11. INSERT INTO test_missing_target VALUES (1, 2, 'ABAB', 'b');
  12. INSERT INTO test_missing_target VALUES (2, 2, 'ABAB', 'c');
  13. INSERT INTO test_missing_target VALUES (3, 3, 'BBBB', 'D');
  14. INSERT INTO test_missing_target VALUES (4, 3, 'BBBB', 'e');
  15. INSERT INTO test_missing_target VALUES (5, 3, 'bbbb', 'F');
  16. INSERT INTO test_missing_target VALUES (6, 4, 'cccc', 'g');
  17. INSERT INTO test_missing_target VALUES (7, 4, 'cccc', 'h');
  18. INSERT INTO test_missing_target VALUES (8, 4, 'CCCC', 'I');
  19. INSERT INTO test_missing_target VALUES (9, 4, 'CCCC', 'j');
  20. -- w/ existing GROUP BY target
  21. SELECT c, count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
  22. c | count
  23. ----------+-------
  24. ABAB | 2
  25. BBBB | 2
  26. CCCC | 2
  27. XXXX | 1
  28. bbbb | 1
  29. cccc | 2
  30. (6 rows)
  31. -- w/o existing GROUP BY target using a relation name in GROUP BY clause
  32. SELECT count(*) FROM test_missing_target GROUP BY test_missing_target.c ORDER BY c;
  33. count
  34. -------
  35. 2
  36. 2
  37. 2
  38. 1
  39. 1
  40. 2
  41. (6 rows)
  42. -- w/o existing GROUP BY target and w/o existing same ORDER BY target
  43. SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b;
  44. count
  45. -------
  46. 1
  47. 2
  48. 3
  49. 4
  50. (4 rows)
  51. -- w/ existing GROUP BY target using a relation name in target
  52. SELECT test_missing_target.b, count(*)
  53. FROM test_missing_target GROUP BY b ORDER BY b;
  54. b | count
  55. ---+-------
  56. 1 | 1
  57. 2 | 2
  58. 3 | 3
  59. 4 | 4
  60. (4 rows)
  61. -- w/o existing GROUP BY target
  62. SELECT c FROM test_missing_target ORDER BY a;
  63. c
  64. ----------
  65. XXXX
  66. ABAB
  67. ABAB
  68. BBBB
  69. BBBB
  70. bbbb
  71. cccc
  72. cccc
  73. CCCC
  74. CCCC
  75. (10 rows)
  76. -- w/o existing ORDER BY target
  77. SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b desc;
  78. count
  79. -------
  80. 4
  81. 3
  82. 2
  83. 1
  84. (4 rows)
  85. -- group using reference number
  86. SELECT count(*) FROM test_missing_target ORDER BY 1 desc;
  87. count
  88. -------
  89. 10
  90. (1 row)
  91. -- order using reference number
  92. SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1;
  93. c | count
  94. ----------+-------
  95. ABAB | 2
  96. BBBB | 2
  97. CCCC | 2
  98. XXXX | 1
  99. bbbb | 1
  100. cccc | 2
  101. (6 rows)
  102. -- order expression w/ target under ambiguous condition
  103. -- failure NOT expected
  104. SELECT a/2, a/2 FROM test_missing_target
  105. ORDER BY a/2;
  106. ?column? | ?column?
  107. ----------+----------
  108. 0 | 0
  109. 0 | 0
  110. 1 | 1
  111. 1 | 1
  112. 2 | 2
  113. 2 | 2
  114. 3 | 3
  115. 3 | 3
  116. 4 | 4
  117. 4 | 4
  118. (10 rows)
  119. -- group expression w/ target under ambiguous condition
  120. -- failure NOT expected
  121. SELECT a/2, a/2 FROM test_missing_target
  122. GROUP BY a/2 ORDER BY a/2;
  123. ?column? | ?column?
  124. ----------+----------
  125. 0 | 0
  126. 1 | 1
  127. 2 | 2
  128. 3 | 3
  129. 4 | 4
  130. (5 rows)
  131. -- group w/ existing GROUP BY target under ambiguous condition
  132. SELECT x.b, count(*) FROM test_missing_target x, test_missing_target y
  133. WHERE x.a = y.a
  134. GROUP BY x.b ORDER BY x.b;
  135. b | count
  136. ---+-------
  137. 1 | 1
  138. 2 | 2
  139. 3 | 3
  140. 4 | 4
  141. (4 rows)
  142. -- group w/o existing GROUP BY target under ambiguous condition
  143. SELECT count(*) FROM test_missing_target x, test_missing_target y
  144. WHERE x.a = y.a
  145. GROUP BY x.b ORDER BY x.b;
  146. count
  147. -------
  148. 1
  149. 2
  150. 3
  151. 4
  152. (4 rows)
  153. -- Functions and expressions
  154. -- w/ existing GROUP BY target
  155. SELECT a%2, count(b) FROM test_missing_target
  156. GROUP BY test_missing_target.a%2
  157. ORDER BY test_missing_target.a%2;
  158. ?column? | count
  159. ----------+-------
  160. 0 | 5
  161. 1 | 5
  162. (2 rows)
  163. -- w/o existing GROUP BY target using a relation name in GROUP BY clause
  164. SELECT count(c) FROM test_missing_target
  165. GROUP BY lower(test_missing_target.c)
  166. ORDER BY lower(test_missing_target.c);
  167. count
  168. -------
  169. 2
  170. 3
  171. 4
  172. 1
  173. (4 rows)
  174. -- w/o existing GROUP BY target and w/o existing same ORDER BY target
  175. SELECT count(b) FROM test_missing_target GROUP BY b/2 ORDER BY b/2;
  176. count
  177. -------
  178. 1
  179. 5
  180. 4
  181. (3 rows)
  182. -- w/ existing GROUP BY target using a relation name in target
  183. SELECT lower(test_missing_target.c), count(c)
  184. FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
  185. lower | count
  186. -------+-------
  187. abab | 2
  188. bbbb | 3
  189. cccc | 4
  190. xxxx | 1
  191. (4 rows)
  192. -- w/o existing GROUP BY target
  193. SELECT a FROM test_missing_target ORDER BY upper(d);
  194. a
  195. ---
  196. 0
  197. 1
  198. 2
  199. 3
  200. 4
  201. 5
  202. 6
  203. 7
  204. 8
  205. 9
  206. (10 rows)
  207. -- w/o existing ORDER BY target
  208. SELECT count(b) FROM test_missing_target
  209. GROUP BY (b + 1) / 2 ORDER BY (b + 1) / 2 desc;
  210. count
  211. -------
  212. 7
  213. 3
  214. (2 rows)
  215. -- group w/ existing GROUP BY target under ambiguous condition
  216. SELECT x.b/2, count(x.b) FROM test_missing_target x, test_missing_target y
  217. WHERE x.a = y.a
  218. GROUP BY x.b/2 ORDER BY x.b/2;
  219. ?column? | count
  220. ----------+-------
  221. 0 | 1
  222. 1 | 5
  223. 2 | 4
  224. (3 rows)
  225. -- Cleanup
  226. DROP TABLE test_missing_target;