Consistently use "superuser" instead of "super user"
[pgsql.git] / src / pl / plpython / expected / plpython_record.out
blob458330713a8c45e8db78e97f5e1a35640d3aa8a1
1 --
2 -- Test returning tuples
3 --
4 CREATE TABLE table_record (
5         first text,
6         second int4
7         ) ;
8 CREATE TYPE type_record AS (
9         first text,
10         second int4
11         ) ;
12 CREATE FUNCTION test_table_record_as(typ text, first text, second integer, retnull boolean) RETURNS table_record AS $$
13 if retnull:
14         return None
15 if typ == 'dict':
16         return { 'first': first, 'second': second, 'additionalfield': 'must not cause trouble' }
17 elif typ == 'tuple':
18         return ( first, second )
19 elif typ == 'list':
20         return [ first, second ]
21 elif typ == 'obj':
22         class type_record: pass
23         type_record.first = first
24         type_record.second = second
25         return type_record
26 $$ LANGUAGE plpythonu;
27 CREATE FUNCTION test_type_record_as(typ text, first text, second integer, retnull boolean) RETURNS type_record AS $$
28 if retnull:
29         return None
30 if typ == 'dict':
31         return { 'first': first, 'second': second, 'additionalfield': 'must not cause trouble' }
32 elif typ == 'tuple':
33         return ( first, second )
34 elif typ == 'list':
35         return [ first, second ]
36 elif typ == 'obj':
37         class type_record: pass
38         type_record.first = first
39         type_record.second = second
40         return type_record
41 elif typ == 'str':
42         return "('%s',%r)" % (first, second)
43 $$ LANGUAGE plpythonu;
44 CREATE FUNCTION test_in_out_params(first in text, second out text) AS $$
45 return first + '_in_to_out';
46 $$ LANGUAGE plpythonu;
47 CREATE FUNCTION test_in_out_params_multi(first in text,
48                                          second out text, third out text) AS $$
49 return (first + '_record_in_to_out_1', first + '_record_in_to_out_2');
50 $$ LANGUAGE plpythonu;
51 CREATE FUNCTION test_inout_params(first inout text) AS $$
52 return first + '_inout';
53 $$ LANGUAGE plpythonu;
54 -- Test tuple returning functions
55 SELECT * FROM test_table_record_as('dict', null, null, false);
56  first | second 
57 -------+--------
58        |       
59 (1 row)
61 SELECT * FROM test_table_record_as('dict', 'one', null, false);
62  first | second 
63 -------+--------
64  one   |       
65 (1 row)
67 SELECT * FROM test_table_record_as('dict', null, 2, false);
68  first | second 
69 -------+--------
70        |      2
71 (1 row)
73 SELECT * FROM test_table_record_as('dict', 'three', 3, false);
74  first | second 
75 -------+--------
76  three |      3
77 (1 row)
79 SELECT * FROM test_table_record_as('dict', null, null, true);
80  first | second 
81 -------+--------
82        |       
83 (1 row)
85 SELECT * FROM test_table_record_as('tuple', null, null, false);
86  first | second 
87 -------+--------
88        |       
89 (1 row)
91 SELECT * FROM test_table_record_as('tuple', 'one', null, false);
92  first | second 
93 -------+--------
94  one   |       
95 (1 row)
97 SELECT * FROM test_table_record_as('tuple', null, 2, false);
98  first | second 
99 -------+--------
100        |      2
101 (1 row)
103 SELECT * FROM test_table_record_as('tuple', 'three', 3, false);
104  first | second 
105 -------+--------
106  three |      3
107 (1 row)
109 SELECT * FROM test_table_record_as('tuple', null, null, true);
110  first | second 
111 -------+--------
112        |       
113 (1 row)
115 SELECT * FROM test_table_record_as('list', null, null, false);
116  first | second 
117 -------+--------
118        |       
119 (1 row)
121 SELECT * FROM test_table_record_as('list', 'one', null, false);
122  first | second 
123 -------+--------
124  one   |       
125 (1 row)
127 SELECT * FROM test_table_record_as('list', null, 2, false);
128  first | second 
129 -------+--------
130        |      2
131 (1 row)
133 SELECT * FROM test_table_record_as('list', 'three', 3, false);
134  first | second 
135 -------+--------
136  three |      3
137 (1 row)
139 SELECT * FROM test_table_record_as('list', null, null, true);
140  first | second 
141 -------+--------
142        |       
143 (1 row)
145 SELECT * FROM test_table_record_as('obj', null, null, false);
146  first | second 
147 -------+--------
148        |       
149 (1 row)
151 SELECT * FROM test_table_record_as('obj', 'one', null, false);
152  first | second 
153 -------+--------
154  one   |       
155 (1 row)
157 SELECT * FROM test_table_record_as('obj', null, 2, false);
158  first | second 
159 -------+--------
160        |      2
161 (1 row)
163 SELECT * FROM test_table_record_as('obj', 'three', 3, false);
164  first | second 
165 -------+--------
166  three |      3
167 (1 row)
169 SELECT * FROM test_table_record_as('obj', null, null, true);
170  first | second 
171 -------+--------
172        |       
173 (1 row)
175 SELECT * FROM test_type_record_as('dict', null, null, false);
176  first | second 
177 -------+--------
178        |       
179 (1 row)
181 SELECT * FROM test_type_record_as('dict', 'one', null, false);
182  first | second 
183 -------+--------
184  one   |       
185 (1 row)
187 SELECT * FROM test_type_record_as('dict', null, 2, false);
188  first | second 
189 -------+--------
190        |      2
191 (1 row)
193 SELECT * FROM test_type_record_as('dict', 'three', 3, false);
194  first | second 
195 -------+--------
196  three |      3
197 (1 row)
199 SELECT * FROM test_type_record_as('dict', null, null, true);
200  first | second 
201 -------+--------
202        |       
203 (1 row)
205 SELECT * FROM test_type_record_as('tuple', null, null, false);
206  first | second 
207 -------+--------
208        |       
209 (1 row)
211 SELECT * FROM test_type_record_as('tuple', 'one', null, false);
212  first | second 
213 -------+--------
214  one   |       
215 (1 row)
217 SELECT * FROM test_type_record_as('tuple', null, 2, false);
218  first | second 
219 -------+--------
220        |      2
221 (1 row)
223 SELECT * FROM test_type_record_as('tuple', 'three', 3, false);
224  first | second 
225 -------+--------
226  three |      3
227 (1 row)
229 SELECT * FROM test_type_record_as('tuple', null, null, true);
230  first | second 
231 -------+--------
232        |       
233 (1 row)
235 SELECT * FROM test_type_record_as('list', null, null, false);
236  first | second 
237 -------+--------
238        |       
239 (1 row)
241 SELECT * FROM test_type_record_as('list', 'one', null, false);
242  first | second 
243 -------+--------
244  one   |       
245 (1 row)
247 SELECT * FROM test_type_record_as('list', null, 2, false);
248  first | second 
249 -------+--------
250        |      2
251 (1 row)
253 SELECT * FROM test_type_record_as('list', 'three', 3, false);
254  first | second 
255 -------+--------
256  three |      3
257 (1 row)
259 SELECT * FROM test_type_record_as('list', null, null, true);
260  first | second 
261 -------+--------
262        |       
263 (1 row)
265 SELECT * FROM test_type_record_as('obj', null, null, false);
266  first | second 
267 -------+--------
268        |       
269 (1 row)
271 SELECT * FROM test_type_record_as('obj', 'one', null, false);
272  first | second 
273 -------+--------
274  one   |       
275 (1 row)
277 SELECT * FROM test_type_record_as('obj', null, 2, false);
278  first | second 
279 -------+--------
280        |      2
281 (1 row)
283 SELECT * FROM test_type_record_as('obj', 'three', 3, false);
284  first | second 
285 -------+--------
286  three |      3
287 (1 row)
289 SELECT * FROM test_type_record_as('obj', null, null, true);
290  first | second 
291 -------+--------
292        |       
293 (1 row)
295 SELECT * FROM test_type_record_as('str', 'one', 1, false);
296  first | second 
297 -------+--------
298  'one' |      1
299 (1 row)
301 SELECT * FROM test_in_out_params('test_in');
302       second       
303 -------------------
304  test_in_in_to_out
305 (1 row)
307 SELECT * FROM test_in_out_params_multi('test_in');
308            second           |           third            
309 ----------------------------+----------------------------
310  test_in_record_in_to_out_1 | test_in_record_in_to_out_2
311 (1 row)
313 SELECT * FROM test_inout_params('test_in');
314      first     
315 ---------------
316  test_in_inout
317 (1 row)
319 -- try changing the return types and call functions again
320 ALTER TABLE table_record DROP COLUMN first;
321 ALTER TABLE table_record DROP COLUMN second;
322 ALTER TABLE table_record ADD COLUMN first text;
323 ALTER TABLE table_record ADD COLUMN second int4;
324 SELECT * FROM test_table_record_as('obj', 'one', 1, false);
325  first | second 
326 -------+--------
327  one   |      1
328 (1 row)
330 ALTER TYPE type_record DROP ATTRIBUTE first;
331 ALTER TYPE type_record DROP ATTRIBUTE second;
332 ALTER TYPE type_record ADD ATTRIBUTE first text;
333 ALTER TYPE type_record ADD ATTRIBUTE second int4;
334 SELECT * FROM test_type_record_as('obj', 'one', 1, false);
335  first | second 
336 -------+--------
337  one   |      1
338 (1 row)
340 -- errors cases
341 CREATE FUNCTION test_type_record_error1() RETURNS type_record AS $$
342     return { 'first': 'first' }
343 $$ LANGUAGE plpythonu;
344 SELECT * FROM test_type_record_error1();
345 ERROR:  key "second" not found in mapping
346 HINT:  To return null in a column, add the value None to the mapping with the key named after the column.
347 CONTEXT:  while creating return value
348 PL/Python function "test_type_record_error1"
349 CREATE FUNCTION test_type_record_error2() RETURNS type_record AS $$
350     return [ 'first' ]
351 $$ LANGUAGE plpythonu;
352 SELECT * FROM test_type_record_error2();
353 ERROR:  length of returned sequence did not match number of columns in row
354 CONTEXT:  while creating return value
355 PL/Python function "test_type_record_error2"
356 CREATE FUNCTION test_type_record_error3() RETURNS type_record AS $$
357     class type_record: pass
358     type_record.first = 'first'
359     return type_record
360 $$ LANGUAGE plpythonu;
361 SELECT * FROM test_type_record_error3();
362 ERROR:  attribute "second" does not exist in Python object
363 HINT:  To return null in a column, let the returned object have an attribute named after column with value None.
364 CONTEXT:  while creating return value
365 PL/Python function "test_type_record_error3"
366 CREATE FUNCTION test_type_record_error4() RETURNS type_record AS $$
367     return 'foo'
368 $$ LANGUAGE plpythonu;
369 SELECT * FROM test_type_record_error4();
370 ERROR:  malformed record literal: "foo"
371 DETAIL:  Missing left parenthesis.
372 CONTEXT:  while creating return value
373 PL/Python function "test_type_record_error4"