Changeset: 4f973ef7ce16 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4f973ef7ce16
Modified Files:
        monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh
        monetdb5/extras/pyapi/pyapi.c
Branch: pyapi
Log Message:

Better error handling.


diffs (95 lines):

diff --git a/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh 
b/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh
--- a/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh
+++ b/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh
@@ -1,7 +1,7 @@
 
 
 # The base directory of testing, a new folder is created in this base 
directory [$PYAPI_TEST_DIR], and everything is done in that new folder
-export PYAPI_BASE_DIR=/local/raasveld
+export PYAPI_BASE_DIR=/home/mytherin/
 # The terminal to start mserver with, examples are gnome-terminal, xterm, 
konsole
 export TERMINAL=x-terminal-emulator
 # Port used by the MSERVER
@@ -11,7 +11,7 @@ export MSERVERTEST='netstat -ant | grep 
 # Testing parameters
 # Input test (zero copy vs copy)
 # The input sizes to test (in MB)
-export INPUT_TESTING_SIZES="0.1 1 10 100 1000"
+export INPUT_TESTING_SIZES="0.1 1 10 100 1000 10000"
 # Amount of tests to run for each size
 export INPUT_TESTING_NTESTS=10
 
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
@@ -412,9 +412,9 @@ str PyAPIeval(MalBlkPtr mb, MalStkPtr st
         disable_testing = true;
     }
 
-    if (!disable_testing && benchmark_output != NULL) {
+    if (benchmark_output != NULL) {
         reset_hook();
-        if (!mapped) init_hook();
+        if (!disable_testing && !mapped) init_hook();
         timer(&start_time);
     }
 #endif
@@ -770,7 +770,9 @@ str PyAPIeval(MalBlkPtr mb, MalStkPtr st
             }
         }
         if (result_array == NULL) {
-            msg = createException(MAL, "pyapi.eval", "Failed to create Numpy 
Array from BAT.");
+            if (msg == MAL_SUCCEED) {
+                msg = createException(MAL, "pyapi.eval", "Failed to create 
Numpy Array from BAT.");
+            }
             goto wrapup;
         }
         PyTuple_SetItem(pArgs, ai++, result_array);
@@ -1509,9 +1511,9 @@ returnvalues:
 
 #ifdef _PYAPI_TESTING_
     GDKfree(exprStr);
-    if (!disable_testing && benchmark_output != NULL) {
+    if (benchmark_output != NULL) {
         FILE *f = NULL;
-        if (!mapped) { 
+        if (!mapped && !disable_testing) { 
             revert_hook();
             peak_memory_usage = GET_MEMORY_PEAK();
         }
@@ -1523,8 +1525,10 @@ returnvalues:
         f = fopen(benchmark_output, "a");
         if (f != NULL) {
             fprintf(f, "%llu\t%f\n", peak_memory_usage, 
GET_ELAPSED_TIME(start_time, end_time));
+            fclose(f);
+        } else {
+            perror("Error");
         }
-        fclose(f);
         MT_lock_unset(&pyapiLock, "pyapi.evaluate");
     }
 #endif
@@ -1746,8 +1750,11 @@ wrapup:
 PyObject *PyMaskedArray_FromBAT(PyInput *inp, size_t t_start, size_t t_end, 
char **return_message)
 {
     BAT *b = inp->bat;
+    char *msg;
     PyObject *vararray = PyArrayObject_FromBAT(inp, t_start, t_end, 
return_message);
-    char *msg;
+    if (vararray == NULL) {
+        return NULL;
+    }
     // To deal with null values, we use the numpy masked array structure
     // The masked array structure is an object with two arrays of equal size, 
a data array and a mask array
     // The mask array is a boolean array that has the value 'True' when the 
element is NULL, and 'False' otherwise
@@ -2041,6 +2048,10 @@ PyObject *PyArrayObject_FromBAT(PyInput 
         msg = createException(MAL, "pyapi.eval", "unknown argument type ");
         goto wrapup;
     }
+    if (vararray == NULL) {
+        msg = PyError_CreateException("Failed to convert BAT to Numpy array.", 
NULL);
+        goto wrapup;
+    }
     return vararray;
 wrapup:
     *return_message = msg;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to