~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

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

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--
 
2
-- CASE
 
3
-- Test the case statement
 
4
--
 
5
CREATE TABLE CASE_TBL (
 
6
  i integer,
 
7
  f double precision
 
8
);
 
9
CREATE TABLE CASE2_TBL (
 
10
  i integer,
 
11
  j integer
 
12
);
 
13
INSERT INTO CASE_TBL VALUES (1, 10.1);
 
14
INSERT INTO CASE_TBL VALUES (2, 20.2);
 
15
INSERT INTO CASE_TBL VALUES (3, -30.3);
 
16
INSERT INTO CASE_TBL VALUES (4, NULL);
 
17
INSERT INTO CASE2_TBL VALUES (1, -1);
 
18
INSERT INTO CASE2_TBL VALUES (2, -2);
 
19
INSERT INTO CASE2_TBL VALUES (3, -3);
 
20
INSERT INTO CASE2_TBL VALUES (2, -4);
 
21
INSERT INTO CASE2_TBL VALUES (1, NULL);
 
22
INSERT INTO CASE2_TBL VALUES (NULL, -6);
 
23
--
 
24
-- Simplest examples without tables
 
25
--
 
26
SELECT '3' AS "One",
 
27
  CASE
 
28
    WHEN 1 < 2 THEN 3
 
29
  END AS "Simple WHEN";
 
30
 One | Simple WHEN 
 
31
-----+-------------
 
32
 3   |           3
 
33
(1 row)
 
34
 
 
35
SELECT '<NULL>' AS "One",
 
36
  CASE
 
37
    WHEN 1 > 2 THEN 3
 
38
  END AS "Simple default";
 
39
  One   | Simple default 
 
40
--------+----------------
 
41
 <NULL> |               
 
42
(1 row)
 
43
 
 
44
SELECT '3' AS "One",
 
45
  CASE
 
46
    WHEN 1 < 2 THEN 3
 
47
    ELSE 4
 
48
  END AS "Simple ELSE";
 
49
 One | Simple ELSE 
 
50
-----+-------------
 
51
 3   |           3
 
52
(1 row)
 
53
 
 
54
SELECT '4' AS "One",
 
55
  CASE
 
56
    WHEN 1 > 2 THEN 3
 
57
    ELSE 4
 
58
  END AS "ELSE default";
 
59
 One | ELSE default 
 
60
-----+--------------
 
61
 4   |            4
 
62
(1 row)
 
63
 
 
64
SELECT '6' AS "One",
 
65
  CASE
 
66
    WHEN 1 > 2 THEN 3
 
67
    WHEN 4 < 5 THEN 6
 
68
    ELSE 7
 
69
  END AS "Two WHEN with default";
 
70
 One | Two WHEN with default 
 
71
-----+-----------------------
 
72
 6   |                     6
 
73
(1 row)
 
74
 
 
75
-- Constant-expression folding shouldn't evaluate unreachable subexpressions
 
76
SELECT CASE WHEN 1=0 THEN 1/0 WHEN 1=1 THEN 1 ELSE 2/0 END;
 
77
 case 
 
78
------
 
79
    1
 
80
(1 row)
 
81
 
 
82
SELECT CASE 1 WHEN 0 THEN 1/0 WHEN 1 THEN 1 ELSE 2/0 END;
 
83
 case 
 
84
------
 
85
    1
 
86
(1 row)
 
87
 
 
88
-- However we do not currently suppress folding of potentially
 
89
-- reachable subexpressions
 
90
SELECT CASE WHEN i > 100 THEN 1/0 ELSE 0 END FROM case_tbl;
 
91
ERROR:  division by zero
 
92
-- Test for cases involving untyped literals in test expression
 
93
SELECT CASE 'a' WHEN 'a' THEN 1 ELSE 2 END;
 
94
 case 
 
95
------
 
96
    1
 
97
(1 row)
 
98
 
 
99
--
 
100
-- Examples of targets involving tables
 
101
--
 
102
SELECT '' AS "Five",
 
103
  CASE
 
104
    WHEN i >= 3 THEN i
 
105
  END AS ">= 3 or Null"
 
106
  FROM CASE_TBL;
 
107
 Five | >= 3 or Null 
 
108
------+--------------
 
109
      |             
 
110
      |             
 
111
      |            3
 
112
      |            4
 
113
(4 rows)
 
114
 
 
115
SELECT '' AS "Five",
 
116
  CASE WHEN i >= 3 THEN (i + i)
 
117
       ELSE i
 
118
  END AS "Simplest Math"
 
119
  FROM CASE_TBL;
 
120
 Five | Simplest Math 
 
121
------+---------------
 
122
      |             1
 
123
      |             2
 
124
      |             6
 
125
      |             8
 
126
(4 rows)
 
127
 
 
128
SELECT '' AS "Five", i AS "Value",
 
129
  CASE WHEN (i < 0) THEN 'small'
 
130
       WHEN (i = 0) THEN 'zero'
 
131
       WHEN (i = 1) THEN 'one'
 
132
       WHEN (i = 2) THEN 'two'
 
133
       ELSE 'big'
 
134
  END AS "Category"
 
135
  FROM CASE_TBL;
 
136
 Five | Value | Category 
 
137
------+-------+----------
 
138
      |     1 | one
 
139
      |     2 | two
 
140
      |     3 | big
 
141
      |     4 | big
 
142
(4 rows)
 
143
 
 
144
SELECT '' AS "Five",
 
145
  CASE WHEN ((i < 0) or (i < 0)) THEN 'small'
 
146
       WHEN ((i = 0) or (i = 0)) THEN 'zero'
 
147
       WHEN ((i = 1) or (i = 1)) THEN 'one'
 
148
       WHEN ((i = 2) or (i = 2)) THEN 'two'
 
149
       ELSE 'big'
 
150
  END AS "Category"
 
151
  FROM CASE_TBL;
 
152
 Five | Category 
 
153
------+----------
 
154
      | one
 
155
      | two
 
156
      | big
 
157
      | big
 
158
(4 rows)
 
159
 
 
160
--
 
161
-- Examples of qualifications involving tables
 
162
--
 
163
--
 
164
-- NULLIF() and COALESCE()
 
165
-- Shorthand forms for typical CASE constructs
 
166
--  defined in the SQL92 standard.
 
167
--
 
168
SELECT * FROM CASE_TBL WHERE COALESCE(f,i) = 4;
 
169
 i | f 
 
170
---+---
 
171
 4 |  
 
172
(1 row)
 
173
 
 
174
SELECT * FROM CASE_TBL WHERE NULLIF(f,i) = 2;
 
175
 i | f 
 
176
---+---
 
177
(0 rows)
 
178
 
 
179
SELECT COALESCE(a.f, b.i, b.j)
 
180
  FROM CASE_TBL a, CASE2_TBL b;
 
181
 coalesce 
 
182
----------
 
183
     10.1
 
184
     20.2
 
185
    -30.3
 
186
        1
 
187
     10.1
 
188
     20.2
 
189
    -30.3
 
190
        2
 
191
     10.1
 
192
     20.2
 
193
    -30.3
 
194
        3
 
195
     10.1
 
196
     20.2
 
197
    -30.3
 
198
        2
 
199
     10.1
 
200
     20.2
 
201
    -30.3
 
202
        1
 
203
     10.1
 
204
     20.2
 
205
    -30.3
 
206
       -6
 
207
(24 rows)
 
208
 
 
209
SELECT *
 
210
  FROM CASE_TBL a, CASE2_TBL b
 
211
  WHERE COALESCE(a.f, b.i, b.j) = 2;
 
212
 i | f | i | j  
 
213
---+---+---+----
 
214
 4 |   | 2 | -2
 
215
 4 |   | 2 | -4
 
216
(2 rows)
 
217
 
 
218
SELECT '' AS Five, NULLIF(a.i,b.i) AS "NULLIF(a.i,b.i)",
 
219
  NULLIF(b.i, 4) AS "NULLIF(b.i,4)"
 
220
  FROM CASE_TBL a, CASE2_TBL b;
 
221
 five | NULLIF(a.i,b.i) | NULLIF(b.i,4) 
 
222
------+-----------------+---------------
 
223
      |                 |             1
 
224
      |               2 |             1
 
225
      |               3 |             1
 
226
      |               4 |             1
 
227
      |               1 |             2
 
228
      |                 |             2
 
229
      |               3 |             2
 
230
      |               4 |             2
 
231
      |               1 |             3
 
232
      |               2 |             3
 
233
      |                 |             3
 
234
      |               4 |             3
 
235
      |               1 |             2
 
236
      |                 |             2
 
237
      |               3 |             2
 
238
      |               4 |             2
 
239
      |                 |             1
 
240
      |               2 |             1
 
241
      |               3 |             1
 
242
      |               4 |             1
 
243
      |               1 |              
 
244
      |               2 |              
 
245
      |               3 |              
 
246
      |               4 |              
 
247
(24 rows)
 
248
 
 
249
SELECT '' AS "Two", *
 
250
  FROM CASE_TBL a, CASE2_TBL b
 
251
  WHERE COALESCE(f,b.i) = 2;
 
252
 Two | i | f | i | j  
 
253
-----+---+---+---+----
 
254
     | 4 |   | 2 | -2
 
255
     | 4 |   | 2 | -4
 
256
(2 rows)
 
257
 
 
258
--
 
259
-- Examples of updates involving tables
 
260
--
 
261
UPDATE CASE_TBL
 
262
  SET i = CASE WHEN i >= 3 THEN (- i)
 
263
                ELSE (2 * i) END;
 
264
SELECT * FROM CASE_TBL;
 
265
 i  |   f   
 
266
----+-------
 
267
  2 |  10.1
 
268
  4 |  20.2
 
269
 -3 | -30.3
 
270
 -4 |      
 
271
(4 rows)
 
272
 
 
273
UPDATE CASE_TBL
 
274
  SET i = CASE WHEN i >= 2 THEN (2 * i)
 
275
                ELSE (3 * i) END;
 
276
SELECT * FROM CASE_TBL;
 
277
  i  |   f   
 
278
-----+-------
 
279
   4 |  10.1
 
280
   8 |  20.2
 
281
  -9 | -30.3
 
282
 -12 |      
 
283
(4 rows)
 
284
 
 
285
UPDATE CASE_TBL
 
286
  SET i = CASE WHEN b.i >= 2 THEN (2 * j)
 
287
                ELSE (3 * j) END
 
288
  FROM CASE2_TBL b
 
289
  WHERE j = -CASE_TBL.i;
 
290
SELECT * FROM CASE_TBL;
 
291
  i  |   f   
 
292
-----+-------
 
293
   8 |  20.2
 
294
  -9 | -30.3
 
295
 -12 |      
 
296
  -8 |  10.1
 
297
(4 rows)
 
298
 
 
299
--
 
300
-- Clean up
 
301
--
 
302
DROP TABLE CASE_TBL;
 
303
DROP TABLE CASE2_TBL;