Commit 2d6c375c authored by Bruce Momjian's avatar Bruce Momjian

Back out patch. This should be done like other server-side languages.

---------------------------------------------------------------------------

This patch allows the PL/Python module to do (SRF) functions.

The patch was taken from the CVS version.

I have modified the plpython.c file and have added a test sql script for
testing the functionality. It was actually the script that was in the
8.0.3 version but have since been removed.

In order to signal the end of a set, the called python function must
simply return plpy.EndOfSet and the set would be returned.

Gerrit van Dyk
parent 576ac4b8
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.63 2005/07/04 18:59:42 momjian Exp $ * $PostgreSQL: pgsql/src/pl/plpython/plpython.c,v 1.64 2005/07/05 18:15:51 momjian Exp $
* *
********************************************************************* *********************************************************************
*/ */
...@@ -286,9 +286,6 @@ static PyObject *PLy_exc_error = NULL; ...@@ -286,9 +286,6 @@ static PyObject *PLy_exc_error = NULL;
static PyObject *PLy_exc_fatal = NULL; static PyObject *PLy_exc_fatal = NULL;
static PyObject *PLy_exc_spi_error = NULL; static PyObject *PLy_exc_spi_error = NULL;
/* End-of-set Indication */
static PyObject *PLy_endofset = NULL;
/* some globals for the python module /* some globals for the python module
*/ */
static char PLy_plan_doc[] = { static char PLy_plan_doc[] = {
...@@ -773,16 +770,6 @@ PLy_function_handler(FunctionCallInfo fcinfo, PLyProcedure * proc) ...@@ -773,16 +770,6 @@ PLy_function_handler(FunctionCallInfo fcinfo, PLyProcedure * proc)
fcinfo->isnull = true; fcinfo->isnull = true;
rv = (Datum) NULL; rv = (Datum) NULL;
} }
/* test for end-of-set condition */
else if (fcinfo->flinfo->fn_retset && plrv == PLy_endofset)
{
ReturnSetInfo *rsi;
fcinfo->isnull = true;
rv = (Datum)NULL;
rsi = (ReturnSetInfo *)fcinfo->resultinfo;
rsi->isDone = ExprEndResult;
}
else else
{ {
fcinfo->isnull = false; fcinfo->isnull = false;
...@@ -2330,11 +2317,9 @@ PLy_init_plpy(void) ...@@ -2330,11 +2317,9 @@ PLy_init_plpy(void)
PLy_exc_error = PyErr_NewException("plpy.Error", NULL, NULL); PLy_exc_error = PyErr_NewException("plpy.Error", NULL, NULL);
PLy_exc_fatal = PyErr_NewException("plpy.Fatal", NULL, NULL); PLy_exc_fatal = PyErr_NewException("plpy.Fatal", NULL, NULL);
PLy_exc_spi_error = PyErr_NewException("plpy.SPIError", NULL, NULL); PLy_exc_spi_error = PyErr_NewException("plpy.SPIError", NULL, NULL);
PLy_endofset = PyErr_NewException("plpy.EndOfSet",NULL,NULL);
PyDict_SetItemString(plpy_dict, "Error", PLy_exc_error); PyDict_SetItemString(plpy_dict, "Error", PLy_exc_error);
PyDict_SetItemString(plpy_dict, "Fatal", PLy_exc_fatal); PyDict_SetItemString(plpy_dict, "Fatal", PLy_exc_fatal);
PyDict_SetItemString(plpy_dict, "SPIError", PLy_exc_spi_error); PyDict_SetItemString(plpy_dict, "SPIError", PLy_exc_spi_error);
PyDict_SetItemString(plpy_dict, "EndOfSet", PLy_endofset);
/* /*
* initialize main module, and add plpy * initialize main module, and add plpy
......
CREATE or replace FUNCTION test_setof() returns setof text
AS
'if GD.has_key("calls"):
GD["calls"] = GD["calls"] + 1
if GD["calls"] > 2:
del GD["calls"]
return plpy.EndOfSet
else:
GD["calls"] = 1
return str(GD["calls"])'
LANGUAGE plpythonu;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment