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