aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pl/plpython/expected/plpython_import.out2
-rw-r--r--src/pl/plpython/expected/plpython_spi.out2
-rw-r--r--src/pl/plpython/expected/plpython_test.out13
-rw-r--r--src/pl/plpython/expected/plpython_trigger.out200
-rw-r--r--src/pl/plpython/plpython.c13
-rw-r--r--src/pl/plpython/sql/plpython_test.sql1
6 files changed, 122 insertions, 109 deletions
diff --git a/src/pl/plpython/expected/plpython_import.out b/src/pl/plpython/expected/plpython_import.out
index 7fcd9267371..b91ecc69619 100644
--- a/src/pl/plpython/expected/plpython_import.out
+++ b/src/pl/plpython/expected/plpython_import.out
@@ -51,7 +51,7 @@ return "sha hash of " + plain + " is " + digest.hexdigest()'
-- import python modules
--
SELECT import_fail();
-NOTICE: ('import socket failed -- No module named foosocket',)
+NOTICE: import socket failed -- No module named foosocket
CONTEXT: PL/Python function "import_fail"
import_fail
--------------------
diff --git a/src/pl/plpython/expected/plpython_spi.out b/src/pl/plpython/expected/plpython_spi.out
index 9097262a48d..11bf00da1f5 100644
--- a/src/pl/plpython/expected/plpython_spi.out
+++ b/src/pl/plpython/expected/plpython_spi.out
@@ -125,7 +125,7 @@ else:
return None
$$ LANGUAGE plpythonu;
SELECT result_nrows_test();
-INFO: (True,)
+INFO: True
CONTEXT: PL/Python function "result_nrows_test"
result_nrows_test
-------------------
diff --git a/src/pl/plpython/expected/plpython_test.out b/src/pl/plpython/expected/plpython_test.out
index 8bef675009b..c5cfe5a94f5 100644
--- a/src/pl/plpython/expected/plpython_test.out
+++ b/src/pl/plpython/expected/plpython_test.out
@@ -32,21 +32,24 @@ plpy.debug('debug')
plpy.log('log')
plpy.info('info')
plpy.info(37)
+plpy.info()
plpy.info('info', 37, [1, 2, 3])
plpy.notice('notice')
plpy.warning('warning')
plpy.error('error')
$$ LANGUAGE plpythonu;
SELECT elog_test();
-INFO: ('info',)
+INFO: info
CONTEXT: PL/Python function "elog_test"
-INFO: (37,)
+INFO: 37
+CONTEXT: PL/Python function "elog_test"
+INFO: ()
CONTEXT: PL/Python function "elog_test"
INFO: ('info', 37, [1, 2, 3])
CONTEXT: PL/Python function "elog_test"
-NOTICE: ('notice',)
+NOTICE: notice
CONTEXT: PL/Python function "elog_test"
-WARNING: ('warning',)
+WARNING: warning
CONTEXT: PL/Python function "elog_test"
-ERROR: ('error',)
+ERROR: error
CONTEXT: PL/Python function "elog_test"
diff --git a/src/pl/plpython/expected/plpython_trigger.out b/src/pl/plpython/expected/plpython_trigger.out
index 06a8645a35e..cf5c758fb29 100644
--- a/src/pl/plpython/expected/plpython_trigger.out
+++ b/src/pl/plpython/expected/plpython_trigger.out
@@ -91,208 +91,208 @@ CREATE TRIGGER show_trigger_data_trig_stmt
BEFORE INSERT OR UPDATE OR DELETE OR TRUNCATE ON trigger_test
FOR EACH STATEMENT EXECUTE PROCEDURE trigger_data(23,'skidoo');
insert into trigger_test values(1,'insert');
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => INSERT',)
+NOTICE: TD[event] => INSERT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => STATEMENT',)
+NOTICE: TD[level] => STATEMENT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
+NOTICE: TD[name] => show_trigger_data_trig_stmt
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => INSERT',)
+NOTICE: TD[event] => INSERT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_before',)
+NOTICE: TD[name] => show_trigger_data_trig_before
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[new] => {'i': 1, 'v': 'insert'}",)
+NOTICE: TD[new] => {'i': 1, 'v': 'insert'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => INSERT',)
+NOTICE: TD[event] => INSERT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_after',)
+NOTICE: TD[name] => show_trigger_data_trig_after
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[new] => {'i': 1, 'v': 'insert'}",)
+NOTICE: TD[new] => {'i': 1, 'v': 'insert'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => AFTER',)
+NOTICE: TD[when] => AFTER
CONTEXT: PL/Python function "trigger_data"
update trigger_test set v = 'update' where i = 1;
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => UPDATE',)
+NOTICE: TD[event] => UPDATE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => STATEMENT',)
+NOTICE: TD[level] => STATEMENT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
+NOTICE: TD[name] => show_trigger_data_trig_stmt
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => UPDATE',)
+NOTICE: TD[event] => UPDATE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_before',)
+NOTICE: TD[name] => show_trigger_data_trig_before
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[new] => {'i': 1, 'v': 'update'}",)
+NOTICE: TD[new] => {'i': 1, 'v': 'update'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[old] => {'i': 1, 'v': 'insert'}",)
+NOTICE: TD[old] => {'i': 1, 'v': 'insert'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => UPDATE',)
+NOTICE: TD[event] => UPDATE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_after',)
+NOTICE: TD[name] => show_trigger_data_trig_after
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[new] => {'i': 1, 'v': 'update'}",)
+NOTICE: TD[new] => {'i': 1, 'v': 'update'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[old] => {'i': 1, 'v': 'insert'}",)
+NOTICE: TD[old] => {'i': 1, 'v': 'insert'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => AFTER',)
+NOTICE: TD[when] => AFTER
CONTEXT: PL/Python function "trigger_data"
delete from trigger_test;
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => DELETE',)
+NOTICE: TD[event] => DELETE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => STATEMENT',)
+NOTICE: TD[level] => STATEMENT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
+NOTICE: TD[name] => show_trigger_data_trig_stmt
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => DELETE',)
+NOTICE: TD[event] => DELETE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_before',)
+NOTICE: TD[name] => show_trigger_data_trig_before
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[old] => {'i': 1, 'v': 'update'}",)
+NOTICE: TD[old] => {'i': 1, 'v': 'update'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => DELETE',)
+NOTICE: TD[event] => DELETE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => ROW',)
+NOTICE: TD[level] => ROW
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_after',)
+NOTICE: TD[name] => show_trigger_data_trig_after
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ("TD[old] => {'i': 1, 'v': 'update'}",)
+NOTICE: TD[old] => {'i': 1, 'v': 'update'}
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => AFTER',)
+NOTICE: TD[when] => AFTER
CONTEXT: PL/Python function "trigger_data"
truncate table trigger_test;
-NOTICE: ("TD[args] => ['23', 'skidoo']",)
+NOTICE: TD[args] => ['23', 'skidoo']
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[event] => TRUNCATE',)
+NOTICE: TD[event] => TRUNCATE
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[level] => STATEMENT',)
+NOTICE: TD[level] => STATEMENT
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[name] => show_trigger_data_trig_stmt',)
+NOTICE: TD[name] => show_trigger_data_trig_stmt
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[new] => None',)
+NOTICE: TD[new] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[old] => None',)
+NOTICE: TD[old] => None
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[relid] => bogus:12345',)
+NOTICE: TD[relid] => bogus:12345
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_name] => trigger_test',)
+NOTICE: TD[table_name] => trigger_test
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[table_schema] => public',)
+NOTICE: TD[table_schema] => public
CONTEXT: PL/Python function "trigger_data"
-NOTICE: ('TD[when] => BEFORE',)
+NOTICE: TD[when] => BEFORE
CONTEXT: PL/Python function "trigger_data"
DROP FUNCTION trigger_data() CASCADE;
NOTICE: drop cascades to 3 other objects
diff --git a/src/pl/plpython/plpython.c b/src/pl/plpython/plpython.c
index 43b1db790a1..820641708c7 100644
--- a/src/pl/plpython/plpython.c
+++ b/src/pl/plpython/plpython.c
@@ -1,7 +1,7 @@
/**********************************************************************
* plpython.c - python as a procedural language for PostgreSQL
*
- * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.131 2009/11/03 09:35:18 petere Exp $
+ * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.132 2009/11/03 11:05:02 petere Exp $
*
*********************************************************************
*/
@@ -3080,7 +3080,16 @@ PLy_output(volatile int level, PyObject *self, PyObject *args)
char *volatile sv;
volatile MemoryContext oldcontext;
- so = PyObject_Str(args);
+ if (PyTuple_Size(args) == 1)
+ {
+ /* Treat single argument specially to avoid undesirable
+ * ('tuple',) decoration. */
+ PyObject *o;
+ PyArg_UnpackTuple(args, "plpy.elog", 1, 1, &o);
+ so = PyObject_Str(o);
+ }
+ else
+ so = PyObject_Str(args);
if (so == NULL || ((sv = PyString_AsString(so)) == NULL))
{
level = ERROR;
diff --git a/src/pl/plpython/sql/plpython_test.sql b/src/pl/plpython/sql/plpython_test.sql
index 4a7a687e666..161399f2ec9 100644
--- a/src/pl/plpython/sql/plpython_test.sql
+++ b/src/pl/plpython/sql/plpython_test.sql
@@ -27,6 +27,7 @@ plpy.debug('debug')
plpy.log('log')
plpy.info('info')
plpy.info(37)
+plpy.info()
plpy.info('info', 37, [1, 2, 3])
plpy.notice('notice')
plpy.warning('warning')