Changeset: 55e06109e6bd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=55e06109e6bd
Modified Files:
        monetdb5/extras/rapi/rapi.c
Branch: Dec2016
Log Message:

Always call res_table_destroy if SQLstatementIntern produced output.


diffs (45 lines):

diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -471,23 +471,27 @@ void* RAPIloopback(void *query) {
        if (err) { // there was an error
                return ScalarString(RSTR(err));
        }
-       if (output && output->nr_cols > 0) {
-               int i, ncols = output->nr_cols;
-               SEXP retlist, names, varvalue = R_NilValue;
-               retlist = PROTECT(allocVector(VECSXP, ncols));
-               names = PROTECT(NEW_STRING(ncols));
-               for (i = 0; i < ncols; i++) {
-                       if (!(varvalue = 
bat_to_sexp(BATdescriptor(output->cols[i].b)))) {
-                               UNPROTECT(i + 3);
-                               return ScalarString(RSTR("Conversion error"));
+       if (output) {
+               int ncols = output->nr_cols;
+               if (ncols > 0) {
+                       int i;
+                       SEXP retlist, names, varvalue = R_NilValue;
+                       retlist = PROTECT(allocVector(VECSXP, ncols));
+                       names = PROTECT(NEW_STRING(ncols));
+                       for (i = 0; i < ncols; i++) {
+                               if (!(varvalue = 
bat_to_sexp(BATdescriptor(output->cols[i].b)))) {
+                                       UNPROTECT(i + 3);
+                                       return ScalarString(RSTR("Conversion 
error"));
+                               }
+                               SET_STRING_ELT(names, i, 
RSTR(output->cols[i].name));
+                               SET_VECTOR_ELT(retlist, i, varvalue);
                        }
-                       SET_STRING_ELT(names, i, RSTR(output->cols[i].name));
-                       SET_VECTOR_ELT(retlist, i, varvalue);
+                       res_table_destroy(output);
+                       SET_NAMES(retlist, names);
+                       UNPROTECT(ncols + 2);
+                       return retlist;
                }
                res_table_destroy(output);
-               SET_NAMES(retlist, names);
-               UNPROTECT(ncols + 2);
-               return retlist;
        }
        return ScalarLogical(1);
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to