select_implicit.out 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  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 a different ORDER BY target
  43. -- failure expected
  44. SELECT count(*) FROM test_missing_target GROUP BY a ORDER BY b;
  45. ERROR: column "test_missing_target.b" must appear in the GROUP BY clause or be used in an aggregate function
  46. LINE 1: ...ECT count(*) FROM test_missing_target GROUP BY a ORDER BY b;
  47. ^
  48. -- w/o existing GROUP BY target and w/o existing same ORDER BY target
  49. SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b;
  50. count
  51. -------
  52. 1
  53. 2
  54. 3
  55. 4
  56. (4 rows)
  57. -- w/ existing GROUP BY target using a relation name in target
  58. SELECT test_missing_target.b, count(*)
  59. FROM test_missing_target GROUP BY b ORDER BY b;
  60. b | count
  61. ---+-------
  62. 1 | 1
  63. 2 | 2
  64. 3 | 3
  65. 4 | 4
  66. (4 rows)
  67. -- w/o existing GROUP BY target
  68. SELECT c FROM test_missing_target ORDER BY a;
  69. c
  70. ----------
  71. XXXX
  72. ABAB
  73. ABAB
  74. BBBB
  75. BBBB
  76. bbbb
  77. cccc
  78. cccc
  79. CCCC
  80. CCCC
  81. (10 rows)
  82. -- w/o existing ORDER BY target
  83. SELECT count(*) FROM test_missing_target GROUP BY b ORDER BY b desc;
  84. count
  85. -------
  86. 4
  87. 3
  88. 2
  89. 1
  90. (4 rows)
  91. -- group using reference number
  92. SELECT count(*) FROM test_missing_target ORDER BY 1 desc;
  93. count
  94. -------
  95. 10
  96. (1 row)
  97. -- order using reference number
  98. SELECT c, count(*) FROM test_missing_target GROUP BY 1 ORDER BY 1;
  99. c | count
  100. ----------+-------
  101. ABAB | 2
  102. BBBB | 2
  103. CCCC | 2
  104. XXXX | 1
  105. bbbb | 1
  106. cccc | 2
  107. (6 rows)
  108. -- group using reference number out of range
  109. -- failure expected
  110. SELECT c, count(*) FROM test_missing_target GROUP BY 3;
  111. ERROR: GROUP BY position 3 is not in select list
  112. LINE 1: SELECT c, count(*) FROM test_missing_target GROUP BY 3;
  113. ^
  114. -- group w/o existing GROUP BY and ORDER BY target under ambiguous condition
  115. -- failure expected
  116. SELECT count(*) FROM test_missing_target x, test_missing_target y
  117. WHERE x.a = y.a
  118. GROUP BY b ORDER BY b;
  119. ERROR: column reference "b" is ambiguous
  120. LINE 3: GROUP BY b ORDER BY b;
  121. ^
  122. -- order w/ target under ambiguous condition
  123. -- failure NOT expected
  124. SELECT a, a FROM test_missing_target
  125. ORDER BY a;
  126. a | a
  127. ---+---
  128. 0 | 0
  129. 1 | 1
  130. 2 | 2
  131. 3 | 3
  132. 4 | 4
  133. 5 | 5
  134. 6 | 6
  135. 7 | 7
  136. 8 | 8
  137. 9 | 9
  138. (10 rows)
  139. -- order expression w/ target under ambiguous condition
  140. -- failure NOT expected
  141. SELECT a/2, a/2 FROM test_missing_target
  142. ORDER BY a/2;
  143. ?column? | ?column?
  144. ----------+----------
  145. 0 | 0
  146. 0 | 0
  147. 1 | 1
  148. 1 | 1
  149. 2 | 2
  150. 2 | 2
  151. 3 | 3
  152. 3 | 3
  153. 4 | 4
  154. 4 | 4
  155. (10 rows)
  156. -- group expression w/ target under ambiguous condition
  157. -- failure NOT expected
  158. SELECT a/2, a/2 FROM test_missing_target
  159. GROUP BY a/2 ORDER BY a/2;
  160. ?column? | ?column?
  161. ----------+----------
  162. 0 | 0
  163. 1 | 1
  164. 2 | 2
  165. 3 | 3
  166. 4 | 4
  167. (5 rows)
  168. -- group w/ existing GROUP BY target under ambiguous condition
  169. SELECT x.b, count(*) FROM test_missing_target x, test_missing_target y
  170. WHERE x.a = y.a
  171. GROUP BY x.b ORDER BY x.b;
  172. b | count
  173. ---+-------
  174. 1 | 1
  175. 2 | 2
  176. 3 | 3
  177. 4 | 4
  178. (4 rows)
  179. -- group w/o existing GROUP BY target under ambiguous condition
  180. SELECT count(*) FROM test_missing_target x, test_missing_target y
  181. WHERE x.a = y.a
  182. GROUP BY x.b ORDER BY x.b;
  183. count
  184. -------
  185. 1
  186. 2
  187. 3
  188. 4
  189. (4 rows)
  190. -- group w/o existing GROUP BY target under ambiguous condition
  191. -- into a table
  192. CREATE TABLE test_missing_target2 AS
  193. SELECT count(*)
  194. FROM test_missing_target x, test_missing_target y
  195. WHERE x.a = y.a
  196. GROUP BY x.b ORDER BY x.b;
  197. SELECT * FROM test_missing_target2;
  198. count
  199. -------
  200. 1
  201. 2
  202. 3
  203. 4
  204. (4 rows)
  205. -- Functions and expressions
  206. -- w/ existing GROUP BY target
  207. SELECT a%2, count(b) FROM test_missing_target
  208. GROUP BY test_missing_target.a%2
  209. ORDER BY test_missing_target.a%2;
  210. ?column? | count
  211. ----------+-------
  212. 0 | 5
  213. 1 | 5
  214. (2 rows)
  215. -- w/o existing GROUP BY target using a relation name in GROUP BY clause
  216. SELECT count(c) FROM test_missing_target
  217. GROUP BY lower(test_missing_target.c)
  218. ORDER BY lower(test_missing_target.c);
  219. count
  220. -------
  221. 2
  222. 3
  223. 4
  224. 1
  225. (4 rows)
  226. -- w/o existing GROUP BY target and w/o existing a different ORDER BY target
  227. -- failure expected
  228. SELECT count(a) FROM test_missing_target GROUP BY a ORDER BY b;
  229. ERROR: column "test_missing_target.b" must appear in the GROUP BY clause or be used in an aggregate function
  230. LINE 1: ...ECT count(a) FROM test_missing_target GROUP BY a ORDER BY b;
  231. ^
  232. -- w/o existing GROUP BY target and w/o existing same ORDER BY target
  233. SELECT count(b) FROM test_missing_target GROUP BY b/2 ORDER BY b/2;
  234. count
  235. -------
  236. 1
  237. 5
  238. 4
  239. (3 rows)
  240. -- w/ existing GROUP BY target using a relation name in target
  241. SELECT lower(test_missing_target.c), count(c)
  242. FROM test_missing_target GROUP BY lower(c) ORDER BY lower(c);
  243. lower | count
  244. -------+-------
  245. abab | 2
  246. bbbb | 3
  247. cccc | 4
  248. xxxx | 1
  249. (4 rows)
  250. -- w/o existing GROUP BY target
  251. SELECT a FROM test_missing_target ORDER BY upper(d);
  252. a
  253. ---
  254. 0
  255. 1
  256. 2
  257. 3
  258. 4
  259. 5
  260. 6
  261. 7
  262. 8
  263. 9
  264. (10 rows)
  265. -- w/o existing ORDER BY target
  266. SELECT count(b) FROM test_missing_target
  267. GROUP BY (b + 1) / 2 ORDER BY (b + 1) / 2 desc;
  268. count
  269. -------
  270. 7
  271. 3
  272. (2 rows)
  273. -- group w/o existing GROUP BY and ORDER BY target under ambiguous condition
  274. -- failure expected
  275. SELECT count(x.a) FROM test_missing_target x, test_missing_target y
  276. WHERE x.a = y.a
  277. GROUP BY b/2 ORDER BY b/2;
  278. ERROR: column reference "b" is ambiguous
  279. LINE 3: GROUP BY b/2 ORDER BY b/2;
  280. ^
  281. -- group w/ existing GROUP BY target under ambiguous condition
  282. SELECT x.b/2, count(x.b) FROM test_missing_target x, test_missing_target y
  283. WHERE x.a = y.a
  284. GROUP BY x.b/2 ORDER BY x.b/2;
  285. ?column? | count
  286. ----------+-------
  287. 0 | 1
  288. 1 | 5
  289. 2 | 4
  290. (3 rows)
  291. -- group w/o existing GROUP BY target under ambiguous condition
  292. -- failure expected due to ambiguous b in count(b)
  293. SELECT count(b) FROM test_missing_target x, test_missing_target y
  294. WHERE x.a = y.a
  295. GROUP BY x.b/2;
  296. ERROR: column reference "b" is ambiguous
  297. LINE 1: SELECT count(b) FROM test_missing_target x, test_missing_tar...
  298. ^
  299. -- group w/o existing GROUP BY target under ambiguous condition
  300. -- into a table
  301. CREATE TABLE test_missing_target3 AS
  302. SELECT count(x.b)
  303. FROM test_missing_target x, test_missing_target y
  304. WHERE x.a = y.a
  305. GROUP BY x.b/2 ORDER BY x.b/2;
  306. SELECT * FROM test_missing_target3;
  307. count
  308. -------
  309. 1
  310. 5
  311. 4
  312. (3 rows)
  313. -- Cleanup
  314. DROP TABLE test_missing_target;
  315. DROP TABLE test_missing_target2;
  316. DROP TABLE test_missing_target3;