Back out patch. This should be done like other server-side languages.
authorBruce Momjian
Tue, 5 Jul 2005 18:15:51 +0000 (18:15 +0000)
committerBruce Momjian
Tue, 5 Jul 2005 18:15:51 +0000 (18:15 +0000)
---------------------------------------------------------------------------

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

src/pl/plpython/plpython.c
src/pl/plpython/sql/plpython_setof.sql [deleted file]

index 52ad1775829bfa95edfd1fdb2223ae74e9837784..3d7230ffca958ee0f8446e161378da85e79a79e7 100644 (file)
@@ -29,7 +29,7 @@
  * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * 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;
 static PyObject *PLy_exc_fatal = NULL;
 static PyObject *PLy_exc_spi_error = NULL;
 
-/* End-of-set Indication */
-static PyObject *PLy_endofset = NULL;
-
 /* some globals for the python module
  */
 static char PLy_plan_doc[] = {
@@ -773,16 +770,6 @@ PLy_function_handler(FunctionCallInfo fcinfo, PLyProcedure * proc)
            fcinfo->isnull = true;
            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
        {
            fcinfo->isnull = false;
@@ -2330,11 +2317,9 @@ PLy_init_plpy(void)
    PLy_exc_error = PyErr_NewException("plpy.Error", NULL, NULL);
    PLy_exc_fatal = PyErr_NewException("plpy.Fatal", 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, "Fatal", PLy_exc_fatal);
    PyDict_SetItemString(plpy_dict, "SPIError", PLy_exc_spi_error);
-   PyDict_SetItemString(plpy_dict, "EndOfSet", PLy_endofset);
 
    /*
     * initialize main module, and add plpy
diff --git a/src/pl/plpython/sql/plpython_setof.sql b/src/pl/plpython/sql/plpython_setof.sql
deleted file mode 100644 (file)
index 6e15788..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-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;