Changeset: d175108c84f0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d175108c84f0
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/vaults/fits.c
        sql/backends/monet5/vaults/vault.c
        sql/server/rel_optimizer.c
        sql/server/rel_planner.c
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: Jan2014
Log Message:

first set of SQL coverity fixes...


diffs (truncated from 415 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1291,7 +1291,7 @@ rel2bin_hash_lookup( mvc *sql, sql_rel *
        stmt *idx = bin_find_column(sql->sa, left, l->l, sa_strconcat(sql->sa, 
"%", i->base.name));
        int swap_exp = 0, swap_rel = 0;
 
-       if (!idx && left) {
+       if (!idx) {
                swap_exp = 1;
                l = e->r;
                idx = bin_find_column(sql->sa, left, l->l, 
sa_strconcat(sql->sa, "%", i->base.name));
@@ -2792,6 +2792,9 @@ insert_check_ukey(mvc *sql, list *insert
                                orderby_grp = stmt_result(sql->sa, orderby, 2);
                        }
 
+                       if (!orderby_grp || !orderby_ids)
+                               return NULL;
+
                        sum = sql_bind_aggr(sql->sa, sql->session->schema, 
"not_unique", tail_type(orderby_grp));
                        ssum = stmt_aggr(sql->sa, orderby_grp, NULL, NULL, sum, 
1, 0);
                        /* combine results */
@@ -3220,7 +3223,8 @@ update_check_ukey(mvc *sql, stmt **updat
                                }
 
                                /* apply cand list first */
-                               upd = stmt_project(sql->sa, cand, upd);
+                               if (cand)
+                                       upd = stmt_project(sql->sa, cand, upd);
 
                                /* remove nulls */
                                if ((k->type == ukey) && stmt_has_null(upd)) {
@@ -3362,7 +3366,7 @@ join_updated_pkey(mvc *sql, sql_key * k,
        node *m, *o;
        sql_key *rk = &((sql_fkey*)k)->rkey->k;
        stmt *s = NULL, *dels = stmt_dels(sql, rk->t), *fdels;
-       stmt *null = NULL, *rows, *ntids, *ids;
+       stmt *null = NULL, *rows;
        sql_subtype *wrd = sql_bind_localtype("wrd");
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_subaggr *cnt = sql_bind_aggr(sql->sa, sql->session->schema, 
"count", NULL);
@@ -3374,11 +3378,7 @@ join_updated_pkey(mvc *sql, sql_key * k,
        rows = stmt_idx(sql, k->idx, fdels);
 
        rows = stmt_join(sql->sa, rows, tids, cmp_equal); /* join over the join 
index */
-       ids = stmt_result(sql->sa, rows, 1);
        rows = stmt_result(sql->sa, rows, 0);
-       ntids = stmt_tid(sql->sa, k->idx->t);
-       ntids = stmt_project(sql->sa, rows, ntids);
-       ids = stmt_project(sql->sa, stmt_reverse(sql->sa, ntids), ids);
 
        for (m = k->idx->columns->h, o = rk->columns->h; m && o; m = m->next, o 
= o->next) {
                sql_kc *fc = m->data;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1999,7 +1999,13 @@ DELTAsub(bat *result, bat *col, bat *cid
        res = c;
        if (BATcount(u_id)) {
                u_id = BATdescriptor(*uid);
+               if (!u_id)
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
                cminu = BATkdiff(BATmirror(c), BATmirror(u_id));
+               if (!cminu) {
+                       BBPunfix(u_id->batCacheid);
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
+               }
                BBPunfix(c->batCacheid);
                res = c = BATmirror(BATmark(cminu, 0));
                BBPunfix(cminu->batCacheid);
@@ -2012,12 +2018,25 @@ DELTAsub(bat *result, bat *col, bat *cid
                u = BATleftfetchjoin(u_val, u_id, BATcount(u_val));
                BBPunfix(u_val->batCacheid);
                BBPunfix(u_id->batCacheid);
+               if (!u) {
+                       BBPunfix(c->batCacheid);
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
+               }
                if (BATcount(u)) {      /* check selected updated values 
against candidates */
                        BAT *c_ids = BATdescriptor(*cid);
 
+                       if (!c_ids){
+                               BBPunfix(c->batCacheid);
+                               BBPunfix(u->batCacheid);
+                               throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
+                       }
                        cminu = BATsemijoin(BATmirror(u), BATmirror(c_ids));
                        BBPunfix(c_ids->batCacheid);
                        BBPunfix(u->batCacheid);
+                       if (!cminu) {
+                               BBPunfix(c->batCacheid);
+                               throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
+                       }
                        u = BATmirror(cminu);
                }
                res = BATappend(c, u, TRUE);
@@ -2025,17 +2044,25 @@ DELTAsub(bat *result, bat *col, bat *cid
 
                u = BATsort(BATmirror(res));
                BBPunfix(res->batCacheid);
+               if (!u) {
+                       BBPunfix(c->batCacheid);
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
+               }
                res = BATmirror(BATmark(u, 0));
                BBPunfix(u->batCacheid);
        }
 
        if (i) {
                i = BATdescriptor(*ins);
+               if (!i)
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
                if (BATcount(u_id)) {
                        u_id = BATdescriptor(*uid);
                        cminu = BATkdiff(BATmirror(i), BATmirror(u_id));
                        BBPunfix(i->batCacheid);
                        BBPunfix(u_id->batCacheid);
+                       if (!cminu) 
+                               throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
                        i = BATmirror(BATmark(cminu, 0));
                        BBPunfix(cminu->batCacheid);
                }
@@ -2044,6 +2071,8 @@ DELTAsub(bat *result, bat *col, bat *cid
 
                u = BATsort(BATmirror(res));
                BBPunfix(res->batCacheid);
+               if (!u) 
+                       throw(MAL, "sql.delta", RUNTIME_OBJECT_MISSING);
                res = BATmirror(BATmark(u, 0));
                BBPunfix(u->batCacheid);
        }
@@ -4613,7 +4642,6 @@ RAstatement(Client cntxt, MalBlkPtr mb, 
                int oldvtop = cntxt->curprg->def->vtop;
                int oldstop = cntxt->curprg->def->stop;
                stmt *s;
-               char *msg;
                MalStkPtr oldglb = cntxt->glb;
 
                if (*opt)
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -564,7 +564,7 @@ range_join_convertable(stmt *s, stmt **b
                h = s->op3->op1->op4.lval->t->data;
        }
 
-       if ((ls = (l && strcmp(s->op2->op4.funcval->func->base.name, "sql_sub") 
== 0 && l->nrcols == 0) || (hs = (h && 
strcmp(s->op3->op4.funcval->func->base.name, "sql_add") == 0 && h->nrcols == 
0))) && (ls || hs) && bl == bh) {
+       if (((ls = (l && strcmp(s->op2->op4.funcval->func->base.name, 
"sql_sub") == 0 && l->nrcols == 0)) || (hs = (h && 
strcmp(s->op3->op4.funcval->func->base.name, "sql_add") == 0 && h->nrcols == 
0))) && (ls || hs) && bl == bh) {
                *base = bl;
                *L = l;
                *H = h;
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -200,7 +200,7 @@ MT_Id sqllogthread, minmaxthread;
 static str
 SQLinit(void)
 {
-       char *debug_str = GDKgetenv("sql_debug");
+       char *debug_str = GDKgetenv("sql_debug"), *msg = MAL_SUCCEED;
        int readonly = GDKgetenv_isyes("gdk_readonly");
        int single_user = GDKgetenv_isyes("gdk_single_user");
        const char *gmt = "GMT";
@@ -223,7 +223,9 @@ SQLinit(void)
        be_funcs.fresolve_function = &monet5_resolve_function;
        monet5_user_init(&be_funcs);
 
-       MTIMEtimezone(&tz, &gmt);
+       msg = MTIMEtimezone(&tz, &gmt);
+       if (msg)
+               return msg;
        (void) tz;
        if (debug_str)
                SQLdebug = strtol(debug_str, NULL, 10);
diff --git a/sql/backends/monet5/vaults/fits.c 
b/sql/backends/monet5/vaults/fits.c
--- a/sql/backends/monet5/vaults/fits.c
+++ b/sql/backends/monet5/vaults/fits.c
@@ -585,7 +585,7 @@ str FITSdir(Client cntxt, MalBlkPtr mb, 
 
                s = stmt;
 
-               while ((ep = readdir(dp)) != NULL) {
+               while ((ep = readdir(dp)) != NULL && !msg) {
                        snprintf(fname, BUFSIZ, "%s%s", dir, ep->d_name);
                        status = 0;
                        fits_open_file(&fptr, fname, READONLY, &status);
@@ -596,7 +596,7 @@ str FITSdir(Client cntxt, MalBlkPtr mb, 
                        }
                }
                (void)closedir(dp);
-       }else
+       } else
                msg = createException(MAL, "listdir", "Couldn't open the 
directory");
 
        return msg;
diff --git a/sql/backends/monet5/vaults/vault.c 
b/sql/backends/monet5/vaults/vault.c
--- a/sql/backends/monet5/vaults/vault.c
+++ b/sql/backends/monet5/vaults/vault.c
@@ -169,10 +169,8 @@ VLTimport(Client cntxt, MalBlkPtr mb, Ma
 
        snprintf(path,BUFSIZ,"%s%c%s", vaultpath, DIR_SEP, *target);
        /*mnstr_printf(GDKout,"#vault.import: %s\n",path);*/
-       if (strcmp(path, *source) == 0) {
-               MTIMEcurrent_timestamp(ret);
-               return MAL_SUCCEED;
-       }
+       if (strcmp(path, *source) == 0) 
+               return MTIMEcurrent_timestamp(ret);
        /* create the subdir */
        GDKcreatedir(path);
        curl = curl_easy_init();
@@ -205,7 +203,7 @@ VLTimport(Client cntxt, MalBlkPtr mb, Ma
                curl_easy_cleanup(curl);
 
                if(CURLE_OK != res)
-                       msg= createException(MAL,"vault.import", "curl [%d] %s 
'%s' -> '%s'\n", res, curl_easy_strerror(res), *source,path);
+                       msg = createException(MAL,"vault.import", "curl [%d] %s 
'%s' -> '%s'\n", res, curl_easy_strerror(res), *source,path);
        }
 
        if(ftpfile.stream)
@@ -217,12 +215,11 @@ VLTimport(Client cntxt, MalBlkPtr mb, Ma
        (void) target;
        msg = createException(MAL,"vault.import", "No curl library");
 #endif
-       if ( msg)
+       if (msg)
                return msg;
-       MTIMEcurrent_timestamp(ret);
        (void) mb;
        (void) cntxt;
-       return msg;
+       return MTIMEcurrent_timestamp(ret);
 }
 
 
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -3205,6 +3205,9 @@ rel_push_join_down(int *changes, mvc *sq
                                        name = exp_name(gbe);
                                }
 
+                               if (!name) 
+                                       return rel;
+
                                for (m = exps->h; m && !fnd; m = m->next) {
                                        sql_exp *je = m->data;
 
diff --git a/sql/server/rel_planner.c b/sql/server/rel_planner.c
--- a/sql/server/rel_planner.c
+++ b/sql/server/rel_planner.c
@@ -134,15 +134,19 @@ memoitem_create( list *memo, sql_allocat
 static lng
 rel_getcount(mvc *sql, sql_rel *rel)
 {
+       lng cnt = 1;
+
        if (!sql->session->tr)
-               return 0;
+               return 1;
 
        switch(rel->op) {
        case op_basetable: {
                sql_table *t = rel->l;
 
-               if (isTable(t))
-                       return store_funcs.count_col(sql->session->tr, 
t->columns.set->h->data, 1);
+               if (isTable(t)) 
+                       cnt = store_funcs.count_col(sql->session->tr, 
t->columns.set->h->data, 1);
+               if (cnt)
+                       return cnt;
        }       break;
        case op_select:
        case op_project:
@@ -150,9 +154,9 @@ rel_getcount(mvc *sql, sql_rel *rel)
                        return rel_getcount(sql, rel->l);
                return 1;
        default:
-               return 0;
+               return 1;
        }
-       return 0;
+       return 1;
 }
 
 static dbl
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -770,8 +770,7 @@ rel_create_func(mvc *sql, dlist *qname, 
                                list *b = NULL;
                                sql_schema *old_schema = cur_schema(sql);
        
-                               if (s)
-                                       sql->session->schema = s;
+                               sql->session->schema = s;
                                b = sequential_block(sql, restype, body, NULL, 
is_func);
                                sql->session->schema = old_schema;
                                sql->params = NULL;
@@ -1088,7 +1087,8 @@ psm_analyze(mvc *sql, dlist *qname, dlis
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to