Changeset: 4f6009444598 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4f6009444598
Modified Files:
        sql/backends/monet5/sql_cat.c
        sql/storage/bat/bat_table.c
Branch: Mar2018
Log Message:

Some error checking.


diffs (134 lines):

diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1253,6 +1253,7 @@ SQLcomment_on(Client cntxt, MalBlkPtr mb
        sql_table *comments;
        sql_column *id_col, *remark_col;
        oid rid;
+       int ok = LOG_OK;
 
        initcontext();
 
@@ -1273,18 +1274,20 @@ SQLcomment_on(Client cntxt, MalBlkPtr mb
                if (!is_oid_nil(rid)) {
                        // have new remark and found old one, so update field
                        /* UPDATE sys.comments SET remark = %s WHERE id = %d */
-                       table_funcs.column_update_value(tx, remark_col, rid, 
remark);
+                       ok = table_funcs.column_update_value(tx, remark_col, 
rid, remark);
                } else {
                        // have new remark but found none so insert row
                        /* INSERT INTO sys.comments (id, remark) VALUES (%d, 
%s) */
-                       table_funcs.table_insert(tx, comments, &objid, remark);
+                       ok = table_funcs.table_insert(tx, comments, &objid, 
remark);
                }
        } else {
                if (!is_oid_nil(rid)) {
                        // have no remark but found one, so delete row
                        /* DELETE FROM sys.comments WHERE id = %d */
-                       table_funcs.table_delete(tx, comments, rid);
+                       ok = table_funcs.table_delete(tx, comments, rid);
                }
        }
+       if (ok != LOG_OK)
+               throw(SQL, "sql.comment_on", SQLSTATE(3F000) "operation 
failed");
        return MAL_SUCCEED;
 }
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -234,8 +234,7 @@ column_update_value(sql_trans *tr, sql_c
 {
        assert(!is_oid_nil(rid));
 
-       store_funcs.update_col(tr, c, &rid, value, c->type.type->localtype);
-       return LOG_OK;
+       return store_funcs.update_col(tr, c, &rid, value, 
c->type.type->localtype);
 }
 
 static int
@@ -245,14 +244,17 @@ table_insert(sql_trans *tr, sql_table *t
        node *n = cs_first_node(&t->columns);
        void *val = NULL;
        int cnt = 0;
+       int ok = LOG_OK;
 
        va_start(va, t);
-       for (; n; n = n->next)
-       {
+       for (; n; n = n->next) {
                sql_column *c = n->data;
                val = va_arg(va, void *);
-               if (!val) break;
-               store_funcs.append_col(tr, c, val, c->type.type->localtype);
+               if (!val)
+                       break;
+               ok = store_funcs.append_col(tr, c, val, 
c->type.type->localtype);
+               if (ok != LOG_OK)
+                       return ok;
                cnt++;
        }
        va_end(va);
@@ -269,8 +271,7 @@ table_delete(sql_trans *tr, sql_table *t
 {
        assert(!is_oid_nil(rid));
 
-       store_funcs.delete_tab(tr, t, &rid, TYPE_oid);
-       return LOG_OK;
+       return store_funcs.delete_tab(tr, t, &rid, TYPE_oid);
 }
 
 
@@ -551,27 +552,46 @@ rids_diff(sql_trans *tr, rids *l, sql_co
        BAT *rcb = full_column(tr, rc);
        gdk_return ret;
 
+       if (lcb == NULL || rcb == NULL) {
+               if (lcb)
+                       full_destroy(rc, lcb);
+               if (rcb)
+                       full_destroy(rc, rcb);
+               return NULL;
+       }
        s = BATproject(r->rids, rcb);
        full_destroy(rc, rcb);
+       if (s == NULL) {
+               full_destroy(rc, lcb);
+               return NULL;
+       }
        rcb = s;
 
        s = BATproject(l->data, lcb);
+       if (s == NULL) {
+               full_destroy(rc, lcb);
+               bat_destroy(rcb);
+               return NULL;
+       }
 
        diff = BATdiff(s, rcb, NULL, NULL, 0, BUN_NONE);
+       bat_destroy(rcb);
+       if (diff == NULL) {
+               full_destroy(rc, lcb);
+               bat_destroy(s);
+               return NULL;
+       }
 
        ret = BATjoin(&rids, &d, lcb, s, NULL, diff, FALSE, BATcount(s));
        bat_destroy(diff);
-       bat_destroy(d);
        full_destroy(lc, lcb);
        bat_destroy(s);
+       if (ret != GDK_SUCCEED)
+               return NULL;
 
+       bat_destroy(d);
        bat_destroy(l->data);
-       if (ret != GDK_SUCCEED) {
-               l->data = NULL;
-       }
-       else {
-               l->data = rids;
-       }
+       l->data = rids;
        return l;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to