~ubuntu-branches/ubuntu/oneiric/postgresql-9.1/oneiric-security

« back to all changes in this revision

Viewing changes to src/test/regress/expected/select.out

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2011-05-11 10:41:53 UTC
  • Revision ID: james.westby@ubuntu.com-20110511104153-psbh2o58553fv1m0
Tags: upstream-9.1~beta1
ImportĀ upstreamĀ versionĀ 9.1~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--
 
2
-- SELECT
 
3
--
 
4
-- btree index
 
5
-- awk '{if($1<10){print;}else{next;}}' onek.data | sort +0n -1
 
6
--
 
7
SELECT * FROM onek
 
8
   WHERE onek.unique1 < 10
 
9
   ORDER BY onek.unique1;
 
10
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 
 
11
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
 
12
       0 |     998 |   0 |    0 |   0 |      0 |       0 |        0 |           0 |         0 |        0 |   0 |    1 | AAAAAA   | KMBAAA   | OOOOxx
 
13
       1 |     214 |   1 |    1 |   1 |      1 |       1 |        1 |           1 |         1 |        1 |   2 |    3 | BAAAAA   | GIAAAA   | OOOOxx
 
14
       2 |     326 |   0 |    2 |   2 |      2 |       2 |        2 |           2 |         2 |        2 |   4 |    5 | CAAAAA   | OMAAAA   | OOOOxx
 
15
       3 |     431 |   1 |    3 |   3 |      3 |       3 |        3 |           3 |         3 |        3 |   6 |    7 | DAAAAA   | PQAAAA   | VVVVxx
 
16
       4 |     833 |   0 |    0 |   4 |      4 |       4 |        4 |           4 |         4 |        4 |   8 |    9 | EAAAAA   | BGBAAA   | HHHHxx
 
17
       5 |     541 |   1 |    1 |   5 |      5 |       5 |        5 |           5 |         5 |        5 |  10 |   11 | FAAAAA   | VUAAAA   | HHHHxx
 
18
       6 |     978 |   0 |    2 |   6 |      6 |       6 |        6 |           6 |         6 |        6 |  12 |   13 | GAAAAA   | QLBAAA   | OOOOxx
 
19
       7 |     647 |   1 |    3 |   7 |      7 |       7 |        7 |           7 |         7 |        7 |  14 |   15 | HAAAAA   | XYAAAA   | VVVVxx
 
20
       8 |     653 |   0 |    0 |   8 |      8 |       8 |        8 |           8 |         8 |        8 |  16 |   17 | IAAAAA   | DZAAAA   | HHHHxx
 
21
       9 |      49 |   1 |    1 |   9 |      9 |       9 |        9 |           9 |         9 |        9 |  18 |   19 | JAAAAA   | XBAAAA   | HHHHxx
 
22
(10 rows)
 
23
 
 
24
--
 
25
-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
 
26
--
 
27
SELECT onek.unique1, onek.stringu1 FROM onek
 
28
   WHERE onek.unique1 < 20
 
29
   ORDER BY unique1 using >;
 
30
 unique1 | stringu1 
 
31
---------+----------
 
32
      19 | TAAAAA
 
33
      18 | SAAAAA
 
34
      17 | RAAAAA
 
35
      16 | QAAAAA
 
36
      15 | PAAAAA
 
37
      14 | OAAAAA
 
38
      13 | NAAAAA
 
39
      12 | MAAAAA
 
40
      11 | LAAAAA
 
41
      10 | KAAAAA
 
42
       9 | JAAAAA
 
43
       8 | IAAAAA
 
44
       7 | HAAAAA
 
45
       6 | GAAAAA
 
46
       5 | FAAAAA
 
47
       4 | EAAAAA
 
48
       3 | DAAAAA
 
49
       2 | CAAAAA
 
50
       1 | BAAAAA
 
51
       0 | AAAAAA
 
52
(20 rows)
 
53
 
 
54
--
 
55
-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
 
56
--
 
57
SELECT onek.unique1, onek.stringu1 FROM onek
 
58
   WHERE onek.unique1 > 980
 
59
   ORDER BY stringu1 using <;
 
60
 unique1 | stringu1 
 
61
---------+----------
 
62
     988 | AMAAAA
 
63
     989 | BMAAAA
 
64
     990 | CMAAAA
 
65
     991 | DMAAAA
 
66
     992 | EMAAAA
 
67
     993 | FMAAAA
 
68
     994 | GMAAAA
 
69
     995 | HMAAAA
 
70
     996 | IMAAAA
 
71
     997 | JMAAAA
 
72
     998 | KMAAAA
 
73
     999 | LMAAAA
 
74
     981 | TLAAAA
 
75
     982 | ULAAAA
 
76
     983 | VLAAAA
 
77
     984 | WLAAAA
 
78
     985 | XLAAAA
 
79
     986 | YLAAAA
 
80
     987 | ZLAAAA
 
81
(19 rows)
 
82
 
 
83
--
 
84
-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
 
85
-- sort +1d -2 +0nr -1
 
86
--
 
87
SELECT onek.unique1, onek.string4 FROM onek
 
88
   WHERE onek.unique1 > 980
 
89
   ORDER BY string4 using <, unique1 using >;
 
90
 unique1 | string4 
 
91
---------+---------
 
92
     999 | AAAAxx
 
93
     995 | AAAAxx
 
94
     983 | AAAAxx
 
95
     982 | AAAAxx
 
96
     981 | AAAAxx
 
97
     998 | HHHHxx
 
98
     997 | HHHHxx
 
99
     993 | HHHHxx
 
100
     990 | HHHHxx
 
101
     986 | HHHHxx
 
102
     996 | OOOOxx
 
103
     991 | OOOOxx
 
104
     988 | OOOOxx
 
105
     987 | OOOOxx
 
106
     985 | OOOOxx
 
107
     994 | VVVVxx
 
108
     992 | VVVVxx
 
109
     989 | VVVVxx
 
110
     984 | VVVVxx
 
111
(19 rows)
 
112
 
 
113
--
 
114
-- awk '{if($1>980){print $1,$16;}else{next;}}' onek.data |
 
115
-- sort +1dr -2 +0n -1
 
116
--
 
117
SELECT onek.unique1, onek.string4 FROM onek
 
118
   WHERE onek.unique1 > 980
 
119
   ORDER BY string4 using >, unique1 using <;
 
120
 unique1 | string4 
 
121
---------+---------
 
122
     984 | VVVVxx
 
123
     989 | VVVVxx
 
124
     992 | VVVVxx
 
125
     994 | VVVVxx
 
126
     985 | OOOOxx
 
127
     987 | OOOOxx
 
128
     988 | OOOOxx
 
129
     991 | OOOOxx
 
130
     996 | OOOOxx
 
131
     986 | HHHHxx
 
132
     990 | HHHHxx
 
133
     993 | HHHHxx
 
134
     997 | HHHHxx
 
135
     998 | HHHHxx
 
136
     981 | AAAAxx
 
137
     982 | AAAAxx
 
138
     983 | AAAAxx
 
139
     995 | AAAAxx
 
140
     999 | AAAAxx
 
141
(19 rows)
 
142
 
 
143
--
 
144
-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
 
145
-- sort +0nr -1 +1d -2
 
146
--
 
147
SELECT onek.unique1, onek.string4 FROM onek
 
148
   WHERE onek.unique1 < 20
 
149
   ORDER BY unique1 using >, string4 using <;
 
150
 unique1 | string4 
 
151
---------+---------
 
152
      19 | OOOOxx
 
153
      18 | VVVVxx
 
154
      17 | HHHHxx
 
155
      16 | OOOOxx
 
156
      15 | VVVVxx
 
157
      14 | AAAAxx
 
158
      13 | OOOOxx
 
159
      12 | AAAAxx
 
160
      11 | OOOOxx
 
161
      10 | AAAAxx
 
162
       9 | HHHHxx
 
163
       8 | HHHHxx
 
164
       7 | VVVVxx
 
165
       6 | OOOOxx
 
166
       5 | HHHHxx
 
167
       4 | HHHHxx
 
168
       3 | VVVVxx
 
169
       2 | OOOOxx
 
170
       1 | OOOOxx
 
171
       0 | OOOOxx
 
172
(20 rows)
 
173
 
 
174
--
 
175
-- awk '{if($1<20){print $1,$16;}else{next;}}' onek.data |
 
176
-- sort +0n -1 +1dr -2
 
177
--
 
178
SELECT onek.unique1, onek.string4 FROM onek
 
179
   WHERE onek.unique1 < 20
 
180
   ORDER BY unique1 using <, string4 using >;
 
181
 unique1 | string4 
 
182
---------+---------
 
183
       0 | OOOOxx
 
184
       1 | OOOOxx
 
185
       2 | OOOOxx
 
186
       3 | VVVVxx
 
187
       4 | HHHHxx
 
188
       5 | HHHHxx
 
189
       6 | OOOOxx
 
190
       7 | VVVVxx
 
191
       8 | HHHHxx
 
192
       9 | HHHHxx
 
193
      10 | AAAAxx
 
194
      11 | OOOOxx
 
195
      12 | AAAAxx
 
196
      13 | OOOOxx
 
197
      14 | AAAAxx
 
198
      15 | VVVVxx
 
199
      16 | OOOOxx
 
200
      17 | HHHHxx
 
201
      18 | VVVVxx
 
202
      19 | OOOOxx
 
203
(20 rows)
 
204
 
 
205
--
 
206
-- test partial btree indexes
 
207
--
 
208
-- As of 7.2, planner probably won't pick an indexscan without stats,
 
209
-- so ANALYZE first.  Also, we want to prevent it from picking a bitmapscan
 
210
-- followed by sort, because that could hide index ordering problems.
 
211
--
 
212
ANALYZE onek2;
 
213
SET enable_seqscan TO off;
 
214
SET enable_bitmapscan TO off;
 
215
SET enable_sort TO off;
 
216
--
 
217
-- awk '{if($1<10){print $0;}else{next;}}' onek.data | sort +0n -1
 
218
--
 
219
SELECT onek2.* FROM onek2 WHERE onek2.unique1 < 10;
 
220
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 
 
221
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
 
222
       0 |     998 |   0 |    0 |   0 |      0 |       0 |        0 |           0 |         0 |        0 |   0 |    1 | AAAAAA   | KMBAAA   | OOOOxx
 
223
       1 |     214 |   1 |    1 |   1 |      1 |       1 |        1 |           1 |         1 |        1 |   2 |    3 | BAAAAA   | GIAAAA   | OOOOxx
 
224
       2 |     326 |   0 |    2 |   2 |      2 |       2 |        2 |           2 |         2 |        2 |   4 |    5 | CAAAAA   | OMAAAA   | OOOOxx
 
225
       3 |     431 |   1 |    3 |   3 |      3 |       3 |        3 |           3 |         3 |        3 |   6 |    7 | DAAAAA   | PQAAAA   | VVVVxx
 
226
       4 |     833 |   0 |    0 |   4 |      4 |       4 |        4 |           4 |         4 |        4 |   8 |    9 | EAAAAA   | BGBAAA   | HHHHxx
 
227
       5 |     541 |   1 |    1 |   5 |      5 |       5 |        5 |           5 |         5 |        5 |  10 |   11 | FAAAAA   | VUAAAA   | HHHHxx
 
228
       6 |     978 |   0 |    2 |   6 |      6 |       6 |        6 |           6 |         6 |        6 |  12 |   13 | GAAAAA   | QLBAAA   | OOOOxx
 
229
       7 |     647 |   1 |    3 |   7 |      7 |       7 |        7 |           7 |         7 |        7 |  14 |   15 | HAAAAA   | XYAAAA   | VVVVxx
 
230
       8 |     653 |   0 |    0 |   8 |      8 |       8 |        8 |           8 |         8 |        8 |  16 |   17 | IAAAAA   | DZAAAA   | HHHHxx
 
231
       9 |      49 |   1 |    1 |   9 |      9 |       9 |        9 |           9 |         9 |        9 |  18 |   19 | JAAAAA   | XBAAAA   | HHHHxx
 
232
(10 rows)
 
233
 
 
234
--
 
235
-- awk '{if($1<20){print $1,$14;}else{next;}}' onek.data | sort +0nr -1
 
236
--
 
237
SELECT onek2.unique1, onek2.stringu1 FROM onek2
 
238
    WHERE onek2.unique1 < 20
 
239
    ORDER BY unique1 using >;
 
240
 unique1 | stringu1 
 
241
---------+----------
 
242
      19 | TAAAAA
 
243
      18 | SAAAAA
 
244
      17 | RAAAAA
 
245
      16 | QAAAAA
 
246
      15 | PAAAAA
 
247
      14 | OAAAAA
 
248
      13 | NAAAAA
 
249
      12 | MAAAAA
 
250
      11 | LAAAAA
 
251
      10 | KAAAAA
 
252
       9 | JAAAAA
 
253
       8 | IAAAAA
 
254
       7 | HAAAAA
 
255
       6 | GAAAAA
 
256
       5 | FAAAAA
 
257
       4 | EAAAAA
 
258
       3 | DAAAAA
 
259
       2 | CAAAAA
 
260
       1 | BAAAAA
 
261
       0 | AAAAAA
 
262
(20 rows)
 
263
 
 
264
--
 
265
-- awk '{if($1>980){print $1,$14;}else{next;}}' onek.data | sort +1d -2
 
266
--
 
267
SELECT onek2.unique1, onek2.stringu1 FROM onek2
 
268
   WHERE onek2.unique1 > 980;
 
269
 unique1 | stringu1 
 
270
---------+----------
 
271
     981 | TLAAAA
 
272
     982 | ULAAAA
 
273
     983 | VLAAAA
 
274
     984 | WLAAAA
 
275
     985 | XLAAAA
 
276
     986 | YLAAAA
 
277
     987 | ZLAAAA
 
278
     988 | AMAAAA
 
279
     989 | BMAAAA
 
280
     990 | CMAAAA
 
281
     991 | DMAAAA
 
282
     992 | EMAAAA
 
283
     993 | FMAAAA
 
284
     994 | GMAAAA
 
285
     995 | HMAAAA
 
286
     996 | IMAAAA
 
287
     997 | JMAAAA
 
288
     998 | KMAAAA
 
289
     999 | LMAAAA
 
290
(19 rows)
 
291
 
 
292
RESET enable_seqscan;
 
293
RESET enable_bitmapscan;
 
294
RESET enable_sort;
 
295
SELECT two, stringu1, ten, string4
 
296
   INTO TABLE tmp
 
297
   FROM onek;
 
298
--
 
299
-- awk '{print $1,$2;}' person.data |
 
300
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
 
301
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
 
302
-- awk 'BEGIN{FS="      ";}{if(NF!=2){print $4,$5;}else{print;}}' - stud_emp.data
 
303
--
 
304
-- SELECT name, age FROM person*; ??? check if different
 
305
SELECT p.name, p.age FROM person* p;
 
306
  name   | age 
 
307
---------+-----
 
308
 mike    |  40
 
309
 joe     |  20
 
310
 sally   |  34
 
311
 sandra  |  19
 
312
 alex    |  30
 
313
 sue     |  50
 
314
 denise  |  24
 
315
 sarah   |  88
 
316
 teresa  |  38
 
317
 nan     |  28
 
318
 leah    |  68
 
319
 wendy   |  78
 
320
 melissa |  28
 
321
 joan    |  18
 
322
 mary    |   8
 
323
 jane    |  58
 
324
 liza    |  38
 
325
 jean    |  28
 
326
 jenifer |  38
 
327
 juanita |  58
 
328
 susan   |  78
 
329
 zena    |  98
 
330
 martie  |  88
 
331
 chris   |  78
 
332
 pat     |  18
 
333
 zola    |  58
 
334
 louise  |  98
 
335
 edna    |  18
 
336
 bertha  |  88
 
337
 sumi    |  38
 
338
 koko    |  88
 
339
 gina    |  18
 
340
 rean    |  48
 
341
 sharon  |  78
 
342
 paula   |  68
 
343
 julie   |  68
 
344
 belinda |  38
 
345
 karen   |  48
 
346
 carina  |  58
 
347
 diane   |  18
 
348
 esther  |  98
 
349
 trudy   |  88
 
350
 fanny   |   8
 
351
 carmen  |  78
 
352
 lita    |  25
 
353
 pamela  |  48
 
354
 sandy   |  38
 
355
 trisha  |  88
 
356
 uma     |  78
 
357
 velma   |  68
 
358
 sharon  |  25
 
359
 sam     |  30
 
360
 bill    |  20
 
361
 fred    |  28
 
362
 larry   |  60
 
363
 jeff    |  23
 
364
 cim     |  30
 
365
 linda   |  19
 
366
(58 rows)
 
367
 
 
368
--
 
369
-- awk '{print $1,$2;}' person.data |
 
370
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - emp.data |
 
371
-- awk '{if(NF!=2){print $3,$2;}else{print;}}' - student.data |
 
372
-- awk 'BEGIN{FS="      ";}{if(NF!=1){print $4,$5;}else{print;}}' - stud_emp.data |
 
373
-- sort +1nr -2
 
374
--
 
375
SELECT p.name, p.age FROM person* p ORDER BY age using >, name;
 
376
  name   | age 
 
377
---------+-----
 
378
 esther  |  98
 
379
 louise  |  98
 
380
 zena    |  98
 
381
 bertha  |  88
 
382
 koko    |  88
 
383
 martie  |  88
 
384
 sarah   |  88
 
385
 trisha  |  88
 
386
 trudy   |  88
 
387
 carmen  |  78
 
388
 chris   |  78
 
389
 sharon  |  78
 
390
 susan   |  78
 
391
 uma     |  78
 
392
 wendy   |  78
 
393
 julie   |  68
 
394
 leah    |  68
 
395
 paula   |  68
 
396
 velma   |  68
 
397
 larry   |  60
 
398
 carina  |  58
 
399
 jane    |  58
 
400
 juanita |  58
 
401
 zola    |  58
 
402
 sue     |  50
 
403
 karen   |  48
 
404
 pamela  |  48
 
405
 rean    |  48
 
406
 mike    |  40
 
407
 belinda |  38
 
408
 jenifer |  38
 
409
 liza    |  38
 
410
 sandy   |  38
 
411
 sumi    |  38
 
412
 teresa  |  38
 
413
 sally   |  34
 
414
 alex    |  30
 
415
 cim     |  30
 
416
 sam     |  30
 
417
 fred    |  28
 
418
 jean    |  28
 
419
 melissa |  28
 
420
 nan     |  28
 
421
 lita    |  25
 
422
 sharon  |  25
 
423
 denise  |  24
 
424
 jeff    |  23
 
425
 bill    |  20
 
426
 joe     |  20
 
427
 linda   |  19
 
428
 sandra  |  19
 
429
 diane   |  18
 
430
 edna    |  18
 
431
 gina    |  18
 
432
 joan    |  18
 
433
 pat     |  18
 
434
 fanny   |   8
 
435
 mary    |   8
 
436
(58 rows)
 
437
 
 
438
--
 
439
-- Test some cases involving whole-row Var referencing a subquery
 
440
--
 
441
select foo from (select 1) as foo;
 
442
 foo 
 
443
-----
 
444
 (1)
 
445
(1 row)
 
446
 
 
447
select foo from (select null) as foo;
 
448
 foo 
 
449
-----
 
450
 ()
 
451
(1 row)
 
452
 
 
453
select foo from (select 'xyzzy',1,null) as foo;
 
454
    foo     
 
455
------------
 
456
 (xyzzy,1,)
 
457
(1 row)
 
458
 
 
459
--
 
460
-- Test VALUES lists
 
461
--
 
462
select * from onek, (values(147, 'RFAAAA'), (931, 'VJAAAA')) as v (i, j)
 
463
    WHERE onek.unique1 = v.i and onek.stringu1 = v.j;
 
464
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 |  i  |   j    
 
465
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------+-----+--------
 
466
     147 |       0 |   1 |    3 |   7 |      7 |       7 |       47 |         147 |       147 |      147 |  14 |   15 | RFAAAA   | AAAAAA   | AAAAxx  | 147 | RFAAAA
 
467
     931 |       1 |   1 |    3 |   1 |     11 |       1 |       31 |         131 |       431 |      931 |   2 |    3 | VJAAAA   | BAAAAA   | HHHHxx  | 931 | VJAAAA
 
468
(2 rows)
 
469
 
 
470
-- a more complex case
 
471
-- looks like we're coding lisp :-)
 
472
select * from onek,
 
473
  (values ((select i from
 
474
    (values(10000), (2), (389), (1000), (2000), ((select 10029))) as foo(i)
 
475
    order by i asc limit 1))) bar (i)
 
476
  where onek.unique1 = bar.i;
 
477
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 | i 
 
478
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------+---
 
479
       2 |     326 |   0 |    2 |   2 |      2 |       2 |        2 |           2 |         2 |        2 |   4 |    5 | CAAAAA   | OMAAAA   | OOOOxx  | 2
 
480
(1 row)
 
481
 
 
482
-- try VALUES in a subquery
 
483
select * from onek
 
484
    where (unique1,ten) in (values (1,1), (20,0), (99,9), (17,99))
 
485
    order by unique1;
 
486
 unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4 
 
487
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
 
488
       1 |     214 |   1 |    1 |   1 |      1 |       1 |        1 |           1 |         1 |        1 |   2 |    3 | BAAAAA   | GIAAAA   | OOOOxx
 
489
      20 |     306 |   0 |    0 |   0 |      0 |       0 |       20 |          20 |        20 |       20 |   0 |    1 | UAAAAA   | ULAAAA   | OOOOxx
 
490
      99 |     101 |   1 |    3 |   9 |     19 |       9 |       99 |          99 |        99 |       99 |  18 |   19 | VDAAAA   | XDAAAA   | HHHHxx
 
491
(3 rows)
 
492
 
 
493
-- VALUES is also legal as a standalone query or a set-operation member
 
494
VALUES (1,2), (3,4+4), (7,77.7);
 
495
 column1 | column2 
 
496
---------+---------
 
497
       1 |       2
 
498
       3 |       8
 
499
       7 |    77.7
 
500
(3 rows)
 
501
 
 
502
VALUES (1,2), (3,4+4), (7,77.7)
 
503
UNION ALL
 
504
SELECT 2+2, 57
 
505
UNION ALL
 
506
TABLE int8_tbl;
 
507
     column1      |      column2      
 
508
------------------+-------------------
 
509
                1 |                 2
 
510
                3 |                 8
 
511
                7 |              77.7
 
512
                4 |                57
 
513
              123 |               456
 
514
              123 |  4567890123456789
 
515
 4567890123456789 |               123
 
516
 4567890123456789 |  4567890123456789
 
517
 4567890123456789 | -4567890123456789
 
518
(9 rows)
 
519
 
 
520
--
 
521
-- Test ORDER BY options
 
522
--
 
523
CREATE TEMP TABLE foo (f1 int);
 
524
INSERT INTO foo VALUES (42),(3),(10),(7),(null),(null),(1);
 
525
SELECT * FROM foo ORDER BY f1;
 
526
 f1 
 
527
----
 
528
  1
 
529
  3
 
530
  7
 
531
 10
 
532
 42
 
533
   
 
534
   
 
535
(7 rows)
 
536
 
 
537
SELECT * FROM foo ORDER BY f1 ASC;      -- same thing
 
538
 f1 
 
539
----
 
540
  1
 
541
  3
 
542
  7
 
543
 10
 
544
 42
 
545
   
 
546
   
 
547
(7 rows)
 
548
 
 
549
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
 
550
 f1 
 
551
----
 
552
   
 
553
   
 
554
  1
 
555
  3
 
556
  7
 
557
 10
 
558
 42
 
559
(7 rows)
 
560
 
 
561
SELECT * FROM foo ORDER BY f1 DESC;
 
562
 f1 
 
563
----
 
564
   
 
565
   
 
566
 42
 
567
 10
 
568
  7
 
569
  3
 
570
  1
 
571
(7 rows)
 
572
 
 
573
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
 
574
 f1 
 
575
----
 
576
 42
 
577
 10
 
578
  7
 
579
  3
 
580
  1
 
581
   
 
582
   
 
583
(7 rows)
 
584
 
 
585
-- check if indexscans do the right things
 
586
CREATE INDEX fooi ON foo (f1);
 
587
SET enable_sort = false;
 
588
SELECT * FROM foo ORDER BY f1;
 
589
 f1 
 
590
----
 
591
  1
 
592
  3
 
593
  7
 
594
 10
 
595
 42
 
596
   
 
597
   
 
598
(7 rows)
 
599
 
 
600
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
 
601
 f1 
 
602
----
 
603
   
 
604
   
 
605
  1
 
606
  3
 
607
  7
 
608
 10
 
609
 42
 
610
(7 rows)
 
611
 
 
612
SELECT * FROM foo ORDER BY f1 DESC;
 
613
 f1 
 
614
----
 
615
   
 
616
   
 
617
 42
 
618
 10
 
619
  7
 
620
  3
 
621
  1
 
622
(7 rows)
 
623
 
 
624
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
 
625
 f1 
 
626
----
 
627
 42
 
628
 10
 
629
  7
 
630
  3
 
631
  1
 
632
   
 
633
   
 
634
(7 rows)
 
635
 
 
636
DROP INDEX fooi;
 
637
CREATE INDEX fooi ON foo (f1 DESC);
 
638
SELECT * FROM foo ORDER BY f1;
 
639
 f1 
 
640
----
 
641
  1
 
642
  3
 
643
  7
 
644
 10
 
645
 42
 
646
   
 
647
   
 
648
(7 rows)
 
649
 
 
650
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
 
651
 f1 
 
652
----
 
653
   
 
654
   
 
655
  1
 
656
  3
 
657
  7
 
658
 10
 
659
 42
 
660
(7 rows)
 
661
 
 
662
SELECT * FROM foo ORDER BY f1 DESC;
 
663
 f1 
 
664
----
 
665
   
 
666
   
 
667
 42
 
668
 10
 
669
  7
 
670
  3
 
671
  1
 
672
(7 rows)
 
673
 
 
674
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
 
675
 f1 
 
676
----
 
677
 42
 
678
 10
 
679
  7
 
680
  3
 
681
  1
 
682
   
 
683
   
 
684
(7 rows)
 
685
 
 
686
DROP INDEX fooi;
 
687
CREATE INDEX fooi ON foo (f1 DESC NULLS LAST);
 
688
SELECT * FROM foo ORDER BY f1;
 
689
 f1 
 
690
----
 
691
  1
 
692
  3
 
693
  7
 
694
 10
 
695
 42
 
696
   
 
697
   
 
698
(7 rows)
 
699
 
 
700
SELECT * FROM foo ORDER BY f1 NULLS FIRST;
 
701
 f1 
 
702
----
 
703
   
 
704
   
 
705
  1
 
706
  3
 
707
  7
 
708
 10
 
709
 42
 
710
(7 rows)
 
711
 
 
712
SELECT * FROM foo ORDER BY f1 DESC;
 
713
 f1 
 
714
----
 
715
   
 
716
   
 
717
 42
 
718
 10
 
719
  7
 
720
  3
 
721
  1
 
722
(7 rows)
 
723
 
 
724
SELECT * FROM foo ORDER BY f1 DESC NULLS LAST;
 
725
 f1 
 
726
----
 
727
 42
 
728
 10
 
729
  7
 
730
  3
 
731
  1
 
732
   
 
733
   
 
734
(7 rows)
 
735
 
 
736
--
 
737
-- Test some corner cases that have been known to confuse the planner
 
738
--
 
739
-- ORDER BY on a constant doesn't really need any sorting
 
740
SELECT 1 AS x ORDER BY x;
 
741
 x 
 
742
---
 
743
 1
 
744
(1 row)
 
745
 
 
746
-- But ORDER BY on a set-valued expression does
 
747
create function sillysrf(int) returns setof int as
 
748
  'values (1),(10),(2),($1)' language sql immutable;
 
749
select sillysrf(42);
 
750
 sillysrf 
 
751
----------
 
752
        1
 
753
       10
 
754
        2
 
755
       42
 
756
(4 rows)
 
757
 
 
758
select sillysrf(-1) order by 1;
 
759
 sillysrf 
 
760
----------
 
761
       -1
 
762
        1
 
763
        2
 
764
       10
 
765
(4 rows)
 
766
 
 
767
drop function sillysrf(int);
 
768
-- X = X isn't a no-op, it's effectively X IS NOT NULL assuming = is strict
 
769
-- (see bug #5084)
 
770
select * from (values (2),(null),(1)) v(k) where k = k order by k;
 
771
 k 
 
772
---
 
773
 1
 
774
 2
 
775
(2 rows)
 
776
 
 
777
select * from (values (2),(null),(1)) v(k) where k = k;
 
778
 k 
 
779
---
 
780
 2
 
781
 1
 
782
(2 rows)
 
783