From dfdae5d63cd0c7eb75fb419c61a5fd62c7e4b326 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 17 Dec 2004 02:14:48 +0000 Subject: [PATCH] Hook up the plpython result-object nrows and status methods correctly. Adjust documentation to match current reality. --- doc/src/sgml/plpython.sgml | 55 ++++++++++++++++---------------------- src/pl/plpython/plpython.c | 30 +++++---------------- 2 files changed, 29 insertions(+), 56 deletions(-) diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml index 6655219d3e..a3d64bd353 100644 --- a/doc/src/sgml/plpython.sgml +++ b/doc/src/sgml/plpython.sgml @@ -1,4 +1,4 @@ - + PL/Python - Python Procedural Language @@ -46,7 +46,8 @@ PL/Python Functions - The Python code you write gets transformed into a Python function. E.g., + The Python code you write gets transformed into a Python function. + For example, CREATE FUNCTION myfunc(text) RETURNS text AS 'return args[0]' @@ -60,13 +61,14 @@ def __plpython_procedure_myfunc_23456(): return args[0] - assuming that 23456 is the OID of the function. + assuming that 23456 is the OID assigned to the function by + PostgreSQL. If you do not provide a return value, Python returns the default - None. The language module translates Python's - None into the SQL null + None. PL/Python translates + Python's None into the SQL null value.null valuein PL/Python @@ -108,7 +110,7 @@ def __plpython_procedure_myfunc_23456(): - When a function is used in a trigger, the dictionary + When a function is used as a trigger, the dictionary TD contains trigger-related values. The trigger rows are in TD["new"] and/or TD["old"] depending on the trigger event. TD["event"] contains @@ -120,9 +122,9 @@ def __plpython_procedure_myfunc_23456(): STATEMENT, and UNKNOWN. TD["name"] contains the trigger name, and TD["relid"] contains the OID of the table on - which the trigger occurred. If the trigger was called with - arguments they are available in TD["args"][0] to - TD["args"][(n-1)]. + which the trigger occurred. If the CREATE TRIGGER command + included arguments, they are available in TD["args"][0] to + TD["args"][(n-1)]. @@ -143,23 +145,23 @@ def __plpython_procedure_myfunc_23456(): this module are available to you in the Python code as plpy.foo. At present plpy implements the functions - plpy.debug("msg"), - plpy.log("msg"), - plpy.info("msg"), - plpy.notice("msg"), - plpy.warning("msg"), - plpy.error("msg"), and - plpy.fatal("msg"). They are mostly equivalent - to calling elog(LEVEL, "msg") + plpy.debug(msg), + plpy.log(msg), + plpy.info(msg), + plpy.notice(msg), + plpy.warning(msg), + plpy.error(msg), and + plpy.fatal(msg). + These are mostly equivalent to calling + elog(level, msg) from C code.elogin PL/Python plpy.error and plpy.fatal actually raise a Python exception which, if uncaught, causes the PL/Python module to call elog(ERROR, msg) when the function handler - returns from the Python interpreter. Long-jumping out of the - Python interpreter is probably not good. raise - plpy.ERROR("msg") and raise - plpy.FATAL("msg") are equivalent to calling + returns from the Python interpreter. raise + plpy.ERROR(msg) and raise + plpy.FATAL(msg) are equivalent to calling plpy.error and plpy.fatal, respectively. @@ -210,17 +212,6 @@ rv = plpy.execute(plan, [ "name" ], 5) The third argument is the limit and is optional. - - In the current version, any database error encountered while - running a PL/Python function will result - in the immediate termination of that function by the server; it is - not possible to trap error conditions using Python try - ... catch constructs. For example, a syntax error in an - SQL statement passed to the plpy.execute call - will terminate the function. This behavior may be changed in a - future release. - - When you prepare a plan using the PL/Python module it is automatically saved. Read the SPI documentation (status); return ob->status; } -#endif static int PLy_result_length(PyObject * arg)