Changeset: 742eac419235 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=742eac419235
Removed Files:
        sql/backends/monet5/Tests/pyapi18.sql
        sql/backends/monet5/Tests/pyapi18.stable.err
        sql/backends/monet5/Tests/pyapi18.stable.out
        sql/backends/monet5/Tests/pyapi19.sql
        sql/backends/monet5/Tests/pyapi19.stable.err
        sql/backends/monet5/Tests/pyapi19.stable.out
        sql/backends/monet5/Tests/pyapi22.sql
        sql/backends/monet5/Tests/pyapi22.stable.err
        sql/backends/monet5/Tests/pyapi22.stable.out
Modified Files:
        monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
        monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
        monetdb5/extras/pyapi/formatinput.c
        monetdb5/extras/pyapi/pyapi.c
        sql/backends/monet5/Tests/All
        sql/backends/monet5/Tests/pyapi09.stable.err
        sql/backends/monet5/Tests/pyapi10.stable.err
Branch: pyapi
Log Message:

Remove _values dictionary.


diffs (truncated from 909 to 300 lines):

diff --git a/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_modify_input.stable.err
@@ -31,45 +31,45 @@ stderr of test 'pyapi_modify_input` in d
 # 12:27:29 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-30203" "--port=31030"
 # 12:27:29 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = rstr:bat[:oid,:str] := 
pyapi.eval(nil:ptr,"arg1[0].__setitem__(0,'a')\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   arg1[0].__setitem__(0,'a')
         !  3.   return(arg1)
         !'numpy.string_' object has no attribute '__setitem__'
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = rstr:bat[:oid,:str] := 
pyapi.eval(nil:ptr,"arg1[0][0]='d'\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   arg1[0][0]='d'
         !  3.   return(arg1)
         !'numpy.string_' object does not support item assignment
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = rstr:bat[:oid,:str] := 
pyapi.eval(nil:ptr,"arg1[0].reverse()\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   arg1[0].reverse()
         !  3.   return(arg1)
         !'numpy.string_' object has no attribute 'reverse'
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = rstr:bat[:oid,:str] := pyapi.eval(nil:ptr,"a = 
arg1[0].remove('a')\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   a = arg1[0].remove('a')
         !  3.   return(arg1)
         !'numpy.string_' object has no attribute 'remove'
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = rstr:bat[:oid,:str] := pyapi.eval(nil:ptr,"a = 
arg1[0].pop()\nreturn(arg1)",bstr);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   a = arg1[0].pop()
         !  3.   return(arg1)
         !'numpy.string_' object has no attribute 'pop'
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = result:bat[:oid,:int] := pyapi.eval(nil:ptr, 
"arg1[0]=4\nreturn(arg1)", a);
 ERROR = !MALException:pyapi.eval:Python exception
-        !  1. def pyfun(arg1,_columns,_column_types,_values,_conn):
+        !  1. def pyfun(arg1,_columns,_column_types,_conn):
         !> 2.   arg1[0]=4
         !  3.   return(arg1)
         !assignment destination is read-only
diff --git a/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err 
b/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
--- a/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
+++ b/monetdb5/extras/pyapi/Tests/pyapi_returntypes.stable.err
@@ -31,45 +31,45 @@ stderr of test 'pyapi_returntypes` in di
 # 23:33:07 >  "mclient" "-lmal" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-20340" "--port=36739"
 # 23:33:07 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = r:bat[:oid,:int] := pyapi.eval(nil:ptr,"return(\"Test\")");
 ERROR = !MALException:pyapi.eval:Could not convert from type STRING to type int
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := pyapi.eval(nil:ptr,"class 
NewClass:\n x = 5\n\nreturn(NewClass())");
 ERROR = !MALException:pyapi.eval:Unsupported result object. Expected either a 
list, dictionary, a numpy array, a numpy masked array or a pandas data frame, 
but received an object of type "<type 'instance'>"
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return(12)");
 ERROR = !MALException:pyapi.eval:A single scalar was returned, yet we expect a 
list of 2 columns. We can only convert a single scalar into a single column, 
thus the result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return(numpy.array([12]))");
 ERROR = !MALException:pyapi.eval:A single array was returned, yet we expect a 
list of 2 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (r:bat[:oid,:int], s:bat[:oid,:int]) := 
pyapi.eval(nil:ptr,"return([12])");
 ERROR = !MALException:pyapi.eval:A single array was returned, yet we expect a 
list of 2 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = r:bat[:oid,:int] := pyapi.eval(nil:ptr,"return([[33,24,55], 
[44,66,345]])");
 ERROR = !MALException:pyapi.eval:An array of size 2 was returned, yet we 
expect a list of 1 columns. The result is invalid.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = a:bat[:oid,:str] := pyapi.eval(nil:ptr,"x = 
unicode(\"hello\")\nreturn(x.encode(\"utf32\"))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = bb:bat[:oid,:int] := pyapi.eval(nil:ptr,"return (1");
 ERROR = !MALException:pyapi.eval:Could not parse Python code
-        !  1. def pyfun(_columns,_column_types,_values,_conn):
+        !  1. def pyfun(_columns,_column_types,_conn):
         !> 2.   return (1
         !invalid syntax (<string>, line 2)
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = cc:bat[:oid,:int] := pyapi.eval(nil:ptr,"x = 4\n  x++\n\treturn (x)");
 ERROR = !MALException:pyapi.eval:Could not parse Python code
-        !  1. def pyfun(_columns,_column_types,_values,_conn):
+        !  1. def pyfun(_columns,_column_types,_conn):
         !  2.   x = 4
         !> 3.     x++
         !  4.       return (x)
         !unexpected indent (<string>, line 3)
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (str1:bat[:oid,:str], str2:bat[:oid,:str]) := pyapi.eval(nil:ptr,"x = 
unicode(\"hello\")\nreturn(numpy.array([[x.encode(\"utf32\")], 
[x.encode(\"utf32\")]]))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
-MAPI  = (monetdb) /var/tmp/mtest-26471/.s.monetdb.31185
+MAPI  = (monetdb) /var/tmp/mtest-30397/.s.monetdb.34935
 QUERY = (str1:bat[:oid,:str], str2:bat[:oid,:str]) := 
pyapi.eval(nil:ptr,"return(numpy.array([[\"Hëllo\", \"Hello Again\"], [\"Hello 
Again Again\",\"That's quite enough.\"]]))");
 ERROR = !MALException:pyapi.eval:Invalid string encoding used. Please return a 
regular ASCII string, or a Numpy_Unicode object.
 
diff --git a/monetdb5/extras/pyapi/formatinput.c 
b/monetdb5/extras/pyapi/formatinput.c
--- a/monetdb5/extras/pyapi/formatinput.c
+++ b/monetdb5/extras/pyapi/formatinput.c
@@ -10,8 +10,8 @@
 #include "gdk.h"
 #include "mal_exception.h"
 
-const size_t additional_argcount = 4;
-const char * additional_args[] = {"_columns", "_column_types", "_values", 
"_conn"};
+const size_t additional_argcount = 3;
+const char * additional_args[] = {"_columns", "_column_types", "_conn"};
 
 //! Parse a PyCodeObject from a string, the string is expected to be in the 
format {@<encoded_function>};, where <encoded_function> is all the PyCodeObject 
properties in order
 PyObject *PyCodeObject_ParseString(char *string, char **msg);
diff --git a/monetdb5/extras/pyapi/pyapi.c b/monetdb5/extras/pyapi/pyapi.c
--- a/monetdb5/extras/pyapi/pyapi.c
+++ b/monetdb5/extras/pyapi/pyapi.c
@@ -91,36 +91,6 @@ static int pyapiInitialized = FALSE;
 
 static bool python_call_active = false;
 
-static PyObject **dictionaries = NULL;
-static Client *clients = NULL;
-static int dictionary_count = 0, max_dictionaries = 0;
-
-static PyObject *GetDictionary(Client c) 
-{
-    int i = 0;
-    for(i = 0; i < dictionary_count; i++) {
-        if (clients[i] == c) {
-            return dictionaries[i];
-        }
-    }
-
-    if (dictionary_count >= max_dictionaries) {
-        PyObject **new_dictionaries = GDKzalloc((max_dictionaries + 2) * 
sizeof(PyObject*));
-        Client *new_clients = GDKzalloc((max_dictionaries + 2) * 
sizeof(Client));
-        for(i = 0; i < dictionary_count; i++) {
-            new_dictionaries[i] = dictionaries[i];
-            new_clients[i] = clients[i];
-        }
-        if (clients != NULL) { GDKfree(clients); GDKfree(dictionaries); }
-        dictionaries = new_dictionaries; clients = new_clients;
-    } 
-
-    clients[dictionary_count] = c;
-    dictionaries[dictionary_count] = PyDict_New();
-    dictionary_count++;
-    return dictionaries[dictionary_count - 1];
-}
-
 #ifdef _PYAPI_TESTING_
 // This #define converts a BAT 'bat' of BAT type 'TYPE_mtpe' to a Numpy array 
of type 'nptpe'
 // This only works with numeric types (bit, byte, int, long, float, double), 
strings are handled separately
@@ -361,28 +331,24 @@ PyAPIeval(Client cntxt, MalBlkPtr mb, Ma
 str
 PyAPIevalStd(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    (void) cntxt;
     return PyAPIeval(cntxt, mb, stk, pci, 0, 0);
 }
 
 str
 PyAPIevalStdMap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    (void) cntxt;
     return PyAPIeval(cntxt, mb, stk, pci, 0, 1);
 }
 
 str
 PyAPIevalAggr(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    (void) cntxt;
     return PyAPIeval(cntxt, mb, stk, pci, 1, 0);
 }
 
 str
 PyAPIevalAggrMap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-    (void) cntxt;
     return PyAPIeval(cntxt, mb, stk, pci, 1, 1);
 }
 
@@ -407,7 +373,7 @@ str PyAPIeval(Client cntxt, MalBlkPtr mb
     BAT *b = NULL;
     node * argnode;
     int seengrp = FALSE;
-    PyObject *pArgs = NULL, *pColumns = NULL, *pColumnTypes = NULL, 
*pConnection, *pDict = NULL, *pResult = NULL; // this is going to be the 
parameter tuple
+    PyObject *pArgs = NULL, *pColumns = NULL, *pColumnTypes = NULL, 
*pConnection, *pResult = NULL; // this is going to be the parameter tuple
     PyObject *code_object = NULL;
     PyReturn *pyreturn_values = NULL;
     PyInput *pyinput_values = NULL;
@@ -711,11 +677,10 @@ str PyAPIeval(Client cntxt, MalBlkPtr mb
 
     // Now we will do the input handling (aka converting the input BATs to 
numpy arrays)
     // We will put the python arrays in a PyTuple object, we will use this 
PyTuple object as the set of arguments to call the Python function
-    pArgs = PyTuple_New(pci->argc - (pci->retc + 2) + (code_object == NULL ? 4 
: 0));
+    pArgs = PyTuple_New(pci->argc - (pci->retc + 2) + (code_object == NULL ? 3 
: 0));
     pColumns = PyDict_New();
     pColumnTypes = PyDict_New();
     pConnection = Py_Connection_Create(cntxt);
-    pDict = GetDictionary(cntxt);
 
     // Now we will loop over the input BATs and convert them to python objects
     for (i = pci->retc + 2; i < pci->argc; i++) {
@@ -755,9 +720,7 @@ str PyAPIeval(Client cntxt, MalBlkPtr mb
     if (code_object == NULL) {
         PyTuple_SetItem(pArgs, ai++, pColumns);
         PyTuple_SetItem(pArgs, ai++, pColumnTypes);
-        PyTuple_SetItem(pArgs, ai++, pDict);
         PyTuple_SetItem(pArgs, ai++, pConnection);
-        Py_INCREF(pDict);
     }
 
     /*[EXECUTE_CODE]*/
@@ -802,21 +765,6 @@ str PyAPIeval(Client cntxt, MalBlkPtr mb
         // The function has been successfully created/compiled, all that 
remains is to actually call the function
         pResult = PyObject_CallObject(pFunc, pArgs);
 
-        {
-            //check the _values dictionary to see if any of the stored values 
are input values
-            PyObject *key, *value;
-            Py_ssize_t pos = 0;
-            while (PyDict_Next(pDict, &pos, &key, &value)) {
-                for(i = 0; i < pci->argc - (pci->retc + 2); i ++) {
-                    PyObject *arg = PyTuple_GetItem(pArgs, i);
-                    if (arg == value) {
-                        msg = createException(MAL, "pyapi.eval", "You cannot 
directly store input arguments in the _values dictionary, instead use 
_values[key] = numpy.copy(input).");
-                        goto wrapup;
-                    }
-                }
-            }
-        }
-
         Py_DECREF(pFunc);
         Py_DECREF(pArgs);
         Py_DECREF(pColumns);
diff --git a/sql/backends/monet5/Tests/All b/sql/backends/monet5/Tests/All
--- a/sql/backends/monet5/Tests/All
+++ b/sql/backends/monet5/Tests/All
@@ -17,11 +17,8 @@ HAVE_LIBPY?pyapi13
 HAVE_LIBPY?pyapi14
 HAVE_LIBPY?pyapi16
 HAVE_LIBPY?pyapi17
-HAVE_LIBPY?pyapi18
-HAVE_LIBPY?pyapi19
 HAVE_LIBPY?pyapi20
 HAVE_LIBPY?pyapi21
-HAVE_LIBPY?pyapi22
 HAVE_LIBPY?pyapi23
 HAVE_LIBPY?pyapi24
 HAVE_LIBPY?pyapi25
diff --git a/sql/backends/monet5/Tests/pyapi09.stable.err 
b/sql/backends/monet5/Tests/pyapi09.stable.err
--- a/sql/backends/monet5/Tests/pyapi09.stable.err
+++ b/sql/backends/monet5/Tests/pyapi09.stable.err
@@ -31,20 +31,20 @@ stderr of test 'pyapi09` in directory 's
 # 14:42:12 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-30058" "--port=35977"
 # 14:42:12 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-25654/.s.monetdb.32235
+MAPI  = (monetdb) /var/tmp/mtest-28978/.s.monetdb.30135
 QUERY = SELECT * FROM pyapi09();
 ERROR = !SELECT: no such table 'unknown_table'
         !Python exception
         !
-        !  1. def pyfun(_columns,_column_types,_values,_conn):
+        !  1. def pyfun(_columns,_column_types,_conn):
         !> 2.   res = _conn.execute('SELECT * FROM unknown_table;')
         !  3.   return numpy.arange(10)
         !  4. 
         !SQL Query Failed: ParseException:SQLparser:42S02!SELECT: no such 
table 'unknown_table'
-MAPI  = (monetdb) /var/tmp/mtest-25654/.s.monetdb.32235
+MAPI  = (monetdb) /var/tmp/mtest-28978/.s.monetdb.30135
 QUERY = SELECT * FROM pyapi09();
 ERROR = !SELECT: no such table 'unknown_table'
-MAPI  = (monetdb) /var/tmp/mtest-25654/.s.monetdb.32235
+MAPI  = (monetdb) /var/tmp/mtest-28978/.s.monetdb.30135
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to