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