Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2e3b16c

Browse files
committed
Improve PL/Python elog output
When the elog functions (plpy.info etc.) get a single argument, just print that argument instead of printing the single-member tuple like ('foo',).
1 parent 2fe1b4d commit 2e3b16c

File tree

6 files changed

+122
-109
lines changed

6 files changed

+122
-109
lines changed

src/pl/plpython/expected/plpython_import.out

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ return "sha hash of " + plain + " is " + digest.hexdigest()'
5151
-- import python modules
5252
--
5353
SELECT import_fail();
54-
NOTICE: ('import socket failed -- No module named foosocket',)
54+
NOTICE: import socket failed -- No module named foosocket
5555
CONTEXT: PL/Python function "import_fail"
5656
import_fail
5757
--------------------

src/pl/plpython/expected/plpython_spi.out

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ else:
125125
return None
126126
$$ LANGUAGE plpythonu;
127127
SELECT result_nrows_test();
128-
INFO: (True,)
128+
INFO: True
129129
CONTEXT: PL/Python function "result_nrows_test"
130130
result_nrows_test
131131
-------------------

src/pl/plpython/expected/plpython_test.out

+8-5
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,24 @@ plpy.debug('debug')
3232
plpy.log('log')
3333
plpy.info('info')
3434
plpy.info(37)
35+
plpy.info()
3536
plpy.info('info', 37, [1, 2, 3])
3637
plpy.notice('notice')
3738
plpy.warning('warning')
3839
plpy.error('error')
3940
$$ LANGUAGE plpythonu;
4041
SELECT elog_test();
41-
INFO: ('info',)
42+
INFO: info
4243
CONTEXT: PL/Python function "elog_test"
43-
INFO: (37,)
44+
INFO: 37
45+
CONTEXT: PL/Python function "elog_test"
46+
INFO: ()
4447
CONTEXT: PL/Python function "elog_test"
4548
INFO: ('info', 37, [1, 2, 3])
4649
CONTEXT: PL/Python function "elog_test"
47-
NOTICE: ('notice',)
50+
NOTICE: notice
4851
CONTEXT: PL/Python function "elog_test"
49-
WARNING: ('warning',)
52+
WARNING: warning
5053
CONTEXT: PL/Python function "elog_test"
51-
ERROR: ('error',)
54+
ERROR: error
5255
CONTEXT: PL/Python function "elog_test"

src/pl/plpython/expected/plpython_trigger.out

+100-100
Original file line numberDiff line numberDiff line change
@@ -91,208 +91,208 @@ CREATE TRIGGER show_trigger_data_trig_stmt
9191
BEFORE INSERT OR UPDATE OR DELETE OR TRUNCATE ON trigger_test
9292
FOR EACH STATEMENT EXECUTE PROCEDURE trigger_data(23,'skidoo');
9393
insert into trigger_test values(1,'insert');
94-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
94+
NOTICE: TD[args] => ['23', 'skidoo']
9595
CONTEXT: PL/Python function "trigger_data"
96-
NOTICE: ('TD[event] => INSERT',)
96+
NOTICE: TD[event] => INSERT
9797
CONTEXT: PL/Python function "trigger_data"
98-
NOTICE: ('TD[level] => STATEMENT',)
98+
NOTICE: TD[level] => STATEMENT
9999
CONTEXT: PL/Python function "trigger_data"
100-
NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
100+
NOTICE: TD[name] => show_trigger_data_trig_stmt
101101
CONTEXT: PL/Python function "trigger_data"
102-
NOTICE: ('TD[new] => None',)
102+
NOTICE: TD[new] => None
103103
CONTEXT: PL/Python function "trigger_data"
104-
NOTICE: ('TD[old] => None',)
104+
NOTICE: TD[old] => None
105105
CONTEXT: PL/Python function "trigger_data"
106-
NOTICE: ('TD[relid] => bogus:12345',)
106+
NOTICE: TD[relid] => bogus:12345
107107
CONTEXT: PL/Python function "trigger_data"
108-
NOTICE: ('TD[table_name] => trigger_test',)
108+
NOTICE: TD[table_name] => trigger_test
109109
CONTEXT: PL/Python function "trigger_data"
110-
NOTICE: ('TD[table_schema] => public',)
110+
NOTICE: TD[table_schema] => public
111111
CONTEXT: PL/Python function "trigger_data"
112-
NOTICE: ('TD[when] => BEFORE',)
112+
NOTICE: TD[when] => BEFORE
113113
CONTEXT: PL/Python function "trigger_data"
114-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
114+
NOTICE: TD[args] => ['23', 'skidoo']
115115
CONTEXT: PL/Python function "trigger_data"
116-
NOTICE: ('TD[event] => INSERT',)
116+
NOTICE: TD[event] => INSERT
117117
CONTEXT: PL/Python function "trigger_data"
118-
NOTICE: ('TD[level] => ROW',)
118+
NOTICE: TD[level] => ROW
119119
CONTEXT: PL/Python function "trigger_data"
120-
NOTICE: ('TD[name] => show_trigger_data_trig_before',)
120+
NOTICE: TD[name] => show_trigger_data_trig_before
121121
CONTEXT: PL/Python function "trigger_data"
122-
NOTICE: ("TD[new] => {'i': 1, 'v': 'insert'}",)
122+
NOTICE: TD[new] => {'i': 1, 'v': 'insert'}
123123
CONTEXT: PL/Python function "trigger_data"
124-
NOTICE: ('TD[old] => None',)
124+
NOTICE: TD[old] => None
125125
CONTEXT: PL/Python function "trigger_data"
126-
NOTICE: ('TD[relid] => bogus:12345',)
126+
NOTICE: TD[relid] => bogus:12345
127127
CONTEXT: PL/Python function "trigger_data"
128-
NOTICE: ('TD[table_name] => trigger_test',)
128+
NOTICE: TD[table_name] => trigger_test
129129
CONTEXT: PL/Python function "trigger_data"
130-
NOTICE: ('TD[table_schema] => public',)
130+
NOTICE: TD[table_schema] => public
131131
CONTEXT: PL/Python function "trigger_data"
132-
NOTICE: ('TD[when] => BEFORE',)
132+
NOTICE: TD[when] => BEFORE
133133
CONTEXT: PL/Python function "trigger_data"
134-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
134+
NOTICE: TD[args] => ['23', 'skidoo']
135135
CONTEXT: PL/Python function "trigger_data"
136-
NOTICE: ('TD[event] => INSERT',)
136+
NOTICE: TD[event] => INSERT
137137
CONTEXT: PL/Python function "trigger_data"
138-
NOTICE: ('TD[level] => ROW',)
138+
NOTICE: TD[level] => ROW
139139
CONTEXT: PL/Python function "trigger_data"
140-
NOTICE: ('TD[name] => show_trigger_data_trig_after',)
140+
NOTICE: TD[name] => show_trigger_data_trig_after
141141
CONTEXT: PL/Python function "trigger_data"
142-
NOTICE: ("TD[new] => {'i': 1, 'v': 'insert'}",)
142+
NOTICE: TD[new] => {'i': 1, 'v': 'insert'}
143143
CONTEXT: PL/Python function "trigger_data"
144-
NOTICE: ('TD[old] => None',)
144+
NOTICE: TD[old] => None
145145
CONTEXT: PL/Python function "trigger_data"
146-
NOTICE: ('TD[relid] => bogus:12345',)
146+
NOTICE: TD[relid] => bogus:12345
147147
CONTEXT: PL/Python function "trigger_data"
148-
NOTICE: ('TD[table_name] => trigger_test',)
148+
NOTICE: TD[table_name] => trigger_test
149149
CONTEXT: PL/Python function "trigger_data"
150-
NOTICE: ('TD[table_schema] => public',)
150+
NOTICE: TD[table_schema] => public
151151
CONTEXT: PL/Python function "trigger_data"
152-
NOTICE: ('TD[when] => AFTER',)
152+
NOTICE: TD[when] => AFTER
153153
CONTEXT: PL/Python function "trigger_data"
154154
update trigger_test set v = 'update' where i = 1;
155-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
155+
NOTICE: TD[args] => ['23', 'skidoo']
156156
CONTEXT: PL/Python function "trigger_data"
157-
NOTICE: ('TD[event] => UPDATE',)
157+
NOTICE: TD[event] => UPDATE
158158
CONTEXT: PL/Python function "trigger_data"
159-
NOTICE: ('TD[level] => STATEMENT',)
159+
NOTICE: TD[level] => STATEMENT
160160
CONTEXT: PL/Python function "trigger_data"
161-
NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
161+
NOTICE: TD[name] => show_trigger_data_trig_stmt
162162
CONTEXT: PL/Python function "trigger_data"
163-
NOTICE: ('TD[new] => None',)
163+
NOTICE: TD[new] => None
164164
CONTEXT: PL/Python function "trigger_data"
165-
NOTICE: ('TD[old] => None',)
165+
NOTICE: TD[old] => None
166166
CONTEXT: PL/Python function "trigger_data"
167-
NOTICE: ('TD[relid] => bogus:12345',)
167+
NOTICE: TD[relid] => bogus:12345
168168
CONTEXT: PL/Python function "trigger_data"
169-
NOTICE: ('TD[table_name] => trigger_test',)
169+
NOTICE: TD[table_name] => trigger_test
170170
CONTEXT: PL/Python function "trigger_data"
171-
NOTICE: ('TD[table_schema] => public',)
171+
NOTICE: TD[table_schema] => public
172172
CONTEXT: PL/Python function "trigger_data"
173-
NOTICE: ('TD[when] => BEFORE',)
173+
NOTICE: TD[when] => BEFORE
174174
CONTEXT: PL/Python function "trigger_data"
175-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
175+
NOTICE: TD[args] => ['23', 'skidoo']
176176
CONTEXT: PL/Python function "trigger_data"
177-
NOTICE: ('TD[event] => UPDATE',)
177+
NOTICE: TD[event] => UPDATE
178178
CONTEXT: PL/Python function "trigger_data"
179-
NOTICE: ('TD[level] => ROW',)
179+
NOTICE: TD[level] => ROW
180180
CONTEXT: PL/Python function "trigger_data"
181-
NOTICE: ('TD[name] => show_trigger_data_trig_before',)
181+
NOTICE: TD[name] => show_trigger_data_trig_before
182182
CONTEXT: PL/Python function "trigger_data"
183-
NOTICE: ("TD[new] => {'i': 1, 'v': 'update'}",)
183+
NOTICE: TD[new] => {'i': 1, 'v': 'update'}
184184
CONTEXT: PL/Python function "trigger_data"
185-
NOTICE: ("TD[old] => {'i': 1, 'v': 'insert'}",)
185+
NOTICE: TD[old] => {'i': 1, 'v': 'insert'}
186186
CONTEXT: PL/Python function "trigger_data"
187-
NOTICE: ('TD[relid] => bogus:12345',)
187+
NOTICE: TD[relid] => bogus:12345
188188
CONTEXT: PL/Python function "trigger_data"
189-
NOTICE: ('TD[table_name] => trigger_test',)
189+
NOTICE: TD[table_name] => trigger_test
190190
CONTEXT: PL/Python function "trigger_data"
191-
NOTICE: ('TD[table_schema] => public',)
191+
NOTICE: TD[table_schema] => public
192192
CONTEXT: PL/Python function "trigger_data"
193-
NOTICE: ('TD[when] => BEFORE',)
193+
NOTICE: TD[when] => BEFORE
194194
CONTEXT: PL/Python function "trigger_data"
195-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
195+
NOTICE: TD[args] => ['23', 'skidoo']
196196
CONTEXT: PL/Python function "trigger_data"
197-
NOTICE: ('TD[event] => UPDATE',)
197+
NOTICE: TD[event] => UPDATE
198198
CONTEXT: PL/Python function "trigger_data"
199-
NOTICE: ('TD[level] => ROW',)
199+
NOTICE: TD[level] => ROW
200200
CONTEXT: PL/Python function "trigger_data"
201-
NOTICE: ('TD[name] => show_trigger_data_trig_after',)
201+
NOTICE: TD[name] => show_trigger_data_trig_after
202202
CONTEXT: PL/Python function "trigger_data"
203-
NOTICE: ("TD[new] => {'i': 1, 'v': 'update'}",)
203+
NOTICE: TD[new] => {'i': 1, 'v': 'update'}
204204
CONTEXT: PL/Python function "trigger_data"
205-
NOTICE: ("TD[old] => {'i': 1, 'v': 'insert'}",)
205+
NOTICE: TD[old] => {'i': 1, 'v': 'insert'}
206206
CONTEXT: PL/Python function "trigger_data"
207-
NOTICE: ('TD[relid] => bogus:12345',)
207+
NOTICE: TD[relid] => bogus:12345
208208
CONTEXT: PL/Python function "trigger_data"
209-
NOTICE: ('TD[table_name] => trigger_test',)
209+
NOTICE: TD[table_name] => trigger_test
210210
CONTEXT: PL/Python function "trigger_data"
211-
NOTICE: ('TD[table_schema] => public',)
211+
NOTICE: TD[table_schema] => public
212212
CONTEXT: PL/Python function "trigger_data"
213-
NOTICE: ('TD[when] => AFTER',)
213+
NOTICE: TD[when] => AFTER
214214
CONTEXT: PL/Python function "trigger_data"
215215
delete from trigger_test;
216-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
216+
NOTICE: TD[args] => ['23', 'skidoo']
217217
CONTEXT: PL/Python function "trigger_data"
218-
NOTICE: ('TD[event] => DELETE',)
218+
NOTICE: TD[event] => DELETE
219219
CONTEXT: PL/Python function "trigger_data"
220-
NOTICE: ('TD[level] => STATEMENT',)
220+
NOTICE: TD[level] => STATEMENT
221221
CONTEXT: PL/Python function "trigger_data"
222-
NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
222+
NOTICE: TD[name] => show_trigger_data_trig_stmt
223223
CONTEXT: PL/Python function "trigger_data"
224-
NOTICE: ('TD[new] => None',)
224+
NOTICE: TD[new] => None
225225
CONTEXT: PL/Python function "trigger_data"
226-
NOTICE: ('TD[old] => None',)
226+
NOTICE: TD[old] => None
227227
CONTEXT: PL/Python function "trigger_data"
228-
NOTICE: ('TD[relid] => bogus:12345',)
228+
NOTICE: TD[relid] => bogus:12345
229229
CONTEXT: PL/Python function "trigger_data"
230-
NOTICE: ('TD[table_name] => trigger_test',)
230+
NOTICE: TD[table_name] => trigger_test
231231
CONTEXT: PL/Python function "trigger_data"
232-
NOTICE: ('TD[table_schema] => public',)
232+
NOTICE: TD[table_schema] => public
233233
CONTEXT: PL/Python function "trigger_data"
234-
NOTICE: ('TD[when] => BEFORE',)
234+
NOTICE: TD[when] => BEFORE
235235
CONTEXT: PL/Python function "trigger_data"
236-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
236+
NOTICE: TD[args] => ['23', 'skidoo']
237237
CONTEXT: PL/Python function "trigger_data"
238-
NOTICE: ('TD[event] => DELETE',)
238+
NOTICE: TD[event] => DELETE
239239
CONTEXT: PL/Python function "trigger_data"
240-
NOTICE: ('TD[level] => ROW',)
240+
NOTICE: TD[level] => ROW
241241
CONTEXT: PL/Python function "trigger_data"
242-
NOTICE: ('TD[name] => show_trigger_data_trig_before',)
242+
NOTICE: TD[name] => show_trigger_data_trig_before
243243
CONTEXT: PL/Python function "trigger_data"
244-
NOTICE: ('TD[new] => None',)
244+
NOTICE: TD[new] => None
245245
CONTEXT: PL/Python function "trigger_data"
246-
NOTICE: ("TD[old] => {'i': 1, 'v': 'update'}",)
246+
NOTICE: TD[old] => {'i': 1, 'v': 'update'}
247247
CONTEXT: PL/Python function "trigger_data"
248-
NOTICE: ('TD[relid] => bogus:12345',)
248+
NOTICE: TD[relid] => bogus:12345
249249
CONTEXT: PL/Python function "trigger_data"
250-
NOTICE: ('TD[table_name] => trigger_test',)
250+
NOTICE: TD[table_name] => trigger_test
251251
CONTEXT: PL/Python function "trigger_data"
252-
NOTICE: ('TD[table_schema] => public',)
252+
NOTICE: TD[table_schema] => public
253253
CONTEXT: PL/Python function "trigger_data"
254-
NOTICE: ('TD[when] => BEFORE',)
254+
NOTICE: TD[when] => BEFORE
255255
CONTEXT: PL/Python function "trigger_data"
256-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
256+
NOTICE: TD[args] => ['23', 'skidoo']
257257
CONTEXT: PL/Python function "trigger_data"
258-
NOTICE: ('TD[event] => DELETE',)
258+
NOTICE: TD[event] => DELETE
259259
CONTEXT: PL/Python function "trigger_data"
260-
NOTICE: ('TD[level] => ROW',)
260+
NOTICE: TD[level] => ROW
261261
CONTEXT: PL/Python function "trigger_data"
262-
NOTICE: ('TD[name] => show_trigger_data_trig_after',)
262+
NOTICE: TD[name] => show_trigger_data_trig_after
263263
CONTEXT: PL/Python function "trigger_data"
264-
NOTICE: ('TD[new] => None',)
264+
NOTICE: TD[new] => None
265265
CONTEXT: PL/Python function "trigger_data"
266-
NOTICE: ("TD[old] => {'i': 1, 'v': 'update'}",)
266+
NOTICE: TD[old] => {'i': 1, 'v': 'update'}
267267
CONTEXT: PL/Python function "trigger_data"
268-
NOTICE: ('TD[relid] => bogus:12345',)
268+
NOTICE: TD[relid] => bogus:12345
269269
CONTEXT: PL/Python function "trigger_data"
270-
NOTICE: ('TD[table_name] => trigger_test',)
270+
NOTICE: TD[table_name] => trigger_test
271271
CONTEXT: PL/Python function "trigger_data"
272-
NOTICE: ('TD[table_schema] => public',)
272+
NOTICE: TD[table_schema] => public
273273
CONTEXT: PL/Python function "trigger_data"
274-
NOTICE: ('TD[when] => AFTER',)
274+
NOTICE: TD[when] => AFTER
275275
CONTEXT: PL/Python function "trigger_data"
276276
truncate table trigger_test;
277-
NOTICE: ("TD[args] => ['23', 'skidoo']",)
277+
NOTICE: TD[args] => ['23', 'skidoo']
278278
CONTEXT: PL/Python function "trigger_data"
279-
NOTICE: ('TD[event] => TRUNCATE',)
279+
NOTICE: TD[event] => TRUNCATE
280280
CONTEXT: PL/Python function "trigger_data"
281-
NOTICE: ('TD[level] => STATEMENT',)
281+
NOTICE: TD[level] => STATEMENT
282282
CONTEXT: PL/Python function "trigger_data"
283-
NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
283+
NOTICE: TD[name] => show_trigger_data_trig_stmt
284284
CONTEXT: PL/Python function "trigger_data"
285-
NOTICE: ('TD[new] => None',)
285+
NOTICE: TD[new] => None
286286
CONTEXT: PL/Python function "trigger_data"
287-
NOTICE: ('TD[old] => None',)
287+
NOTICE: TD[old] => None
288288
CONTEXT: PL/Python function "trigger_data"
289-
NOTICE: ('TD[relid] => bogus:12345',)
289+
NOTICE: TD[relid] => bogus:12345
290290
CONTEXT: PL/Python function "trigger_data"
291-
NOTICE: ('TD[table_name] => trigger_test',)
291+
NOTICE: TD[table_name] => trigger_test
292292
CONTEXT: PL/Python function "trigger_data"
293-
NOTICE: ('TD[table_schema] => public',)
293+
NOTICE: TD[table_schema] => public
294294
CONTEXT: PL/Python function "trigger_data"
295-
NOTICE: ('TD[when] => BEFORE',)
295+
NOTICE: TD[when] => BEFORE
296296
CONTEXT: PL/Python function "trigger_data"
297297
DROP FUNCTION trigger_data() CASCADE;
298298
NOTICE: drop cascades to 3 other objects

src/pl/plpython/plpython.c

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**********************************************************************
22
* plpython.c - python as a procedural language for PostgreSQL
33
*
4-
* $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.131 2009/11/03 09:35:18 petere Exp $
4+
* $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.132 2009/11/03 11:05:02 petere Exp $
55
*
66
*********************************************************************
77
*/
@@ -3080,7 +3080,16 @@ PLy_output(volatile int level, PyObject *self, PyObject *args)
30803080
char *volatile sv;
30813081
volatile MemoryContext oldcontext;
30823082

3083-
so = PyObject_Str(args);
3083+
if (PyTuple_Size(args) == 1)
3084+
{
3085+
/* Treat single argument specially to avoid undesirable
3086+
* ('tuple',) decoration. */
3087+
PyObject *o;
3088+
PyArg_UnpackTuple(args, "plpy.elog", 1, 1, &o);
3089+
so = PyObject_Str(o);
3090+
}
3091+
else
3092+
so = PyObject_Str(args);
30843093
if (so == NULL || ((sv = PyString_AsString(so)) == NULL))
30853094
{
30863095
level = ERROR;

src/pl/plpython/sql/plpython_test.sql

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ plpy.debug('debug')
2727
plpy.log('log')
2828
plpy.info('info')
2929
plpy.info(37)
30+
plpy.info()
3031
plpy.info('info', 37, [1, 2, 3])
3132
plpy.notice('notice')
3233
plpy.warning('warning')

0 commit comments

Comments
 (0)