Changeset: 8c50656f62f2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c50656f62f2 Modified Files: gdk/gdk.h gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_join.c gdk/gdk_join_legacy.c gdk/gdk_sample.c gdk/gdk_select.c gdk/gdk_utils.c monetdb5/extras/sphinx/sphinx.c monetdb5/mal/mal_interpreter.c monetdb5/modules/atoms/mtime.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/array.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/batmmath.c monetdb5/modules/kernel/batstr.c monetdb5/modules/kernel/microbenchmark.c monetdb5/modules/mal/clients.c monetdb5/modules/mal/cluster.c monetdb5/modules/mal/mat.c monetdb5/modules/mal/mdb.c monetdb5/modules/mal/pcre.c monetdb5/modules/mal/zorder.c monetdb5/optimizer/opt_wrapper.c sql/backends/monet5/sql.c sql/benchmarks/ssbm/Tests/01-13.reqtests sql/benchmarks/ssbm/Tests/01-explain.reqtests sql/benchmarks/ssbm/Tests/01-plan.reqtests sql/benchmarks/ssbm/Tests/01.reqtests sql/benchmarks/ssbm/Tests/02-explain.reqtests sql/benchmarks/ssbm/Tests/02-plan.reqtests sql/benchmarks/ssbm/Tests/02.reqtests sql/benchmarks/ssbm/Tests/03-explain.reqtests sql/benchmarks/ssbm/Tests/03-plan.reqtests sql/benchmarks/ssbm/Tests/03.reqtests sql/benchmarks/ssbm/Tests/04-explain.reqtests sql/benchmarks/ssbm/Tests/04-plan.reqtests sql/benchmarks/ssbm/Tests/04.reqtests sql/benchmarks/ssbm/Tests/05-explain.reqtests sql/benchmarks/ssbm/Tests/05-plan.reqtests sql/benchmarks/ssbm/Tests/05.reqtests sql/benchmarks/ssbm/Tests/06-explain.reqtests sql/benchmarks/ssbm/Tests/06-plan.reqtests sql/benchmarks/ssbm/Tests/06.reqtests sql/benchmarks/ssbm/Tests/07-explain.reqtests sql/benchmarks/ssbm/Tests/07-plan.reqtests sql/benchmarks/ssbm/Tests/07.reqtests sql/benchmarks/ssbm/Tests/08-explain.reqtests sql/benchmarks/ssbm/Tests/08-plan.reqtests sql/benchmarks/ssbm/Tests/08.reqtests sql/benchmarks/ssbm/Tests/09-explain.reqtests sql/benchmarks/ssbm/Tests/09-plan.reqtests sql/benchmarks/ssbm/Tests/09.reqtests sql/benchmarks/ssbm/Tests/10-explain.reqtests sql/benchmarks/ssbm/Tests/10-plan.reqtests sql/benchmarks/ssbm/Tests/10.reqtests sql/benchmarks/ssbm/Tests/11-explain.reqtests sql/benchmarks/ssbm/Tests/11-plan.reqtests sql/benchmarks/ssbm/Tests/11.reqtests sql/benchmarks/ssbm/Tests/12-explain.reqtests sql/benchmarks/ssbm/Tests/12-plan.reqtests sql/benchmarks/ssbm/Tests/12.reqtests sql/benchmarks/ssbm/Tests/13-explain.reqtests sql/benchmarks/ssbm/Tests/13-plan.reqtests sql/benchmarks/ssbm/Tests/13.reqtests sql/benchmarks/ssbm/Tests/check1.reqtests sql/benchmarks/ssbm/Tests/load.reqtests sql/storage/bat/bat_utils.c Branch: default Log Message:
Merge with Jan2014 branch. diffs (truncated from 1077 to 300 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1127,7 +1127,8 @@ gdk_export void HEAP_free(Heap *heap, va */ #define BATDELETE (-9999) -gdk_export BAT *BATnew(int hdtype, int tltype, BUN capacity, int role); +gdk_export BAT *BATnew(int hdtype, int tltype, BUN capacity, int role) + __attribute__((warn_unused_result)); gdk_export BAT *BATextend(BAT *b, BUN newcap); /* internal */ diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -389,10 +389,12 @@ BATclone(BAT *b, BUN cap, int role) { BAT *c = BATnew(b->htype, b->ttype, cap, role); - if (c && c->htype == TYPE_void && b->hseqbase != oid_nil) - BATseqbase(c, b->hseqbase); - if (c && c->ttype == TYPE_void && b->tseqbase != oid_nil) - BATseqbase(BATmirror(c), b->tseqbase); + if (c) { + if (c->htype == TYPE_void && b->hseqbase != oid_nil) + BATseqbase(c, b->hseqbase); + if (c->ttype == TYPE_void && b->tseqbase != oid_nil) + BATseqbase(BATmirror(c), b->tseqbase); + } return c; } diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -2256,8 +2256,10 @@ BATintersectcand(BAT *a, BAT *b) if (BATcount(a) == 0 || BATcount(b) == 0) { bn = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); - BATseqbase(bn, 0); - BATseqbase(BATmirror(bn), 0); + if (bn) { + BATseqbase(bn, 0); + BATseqbase(BATmirror(bn), 0); + } return bn; } diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -2506,9 +2506,14 @@ subleftjoin(BAT **r1p, BAT **r2p, BAT *l rcount = MIN(rcount, BATcount(sr)); if (lcount == 0 || rcount == 0) { r1 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + r2 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + if (r1 == NULL || r2 == NULL) { + BBPreclaim(r1); + BBPreclaim(r2); + return GDK_FAIL; + } BATseqbase(r1, 0); BATseqbase(BATmirror(r1), 0); - r2 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); BATseqbase(r2, 0); BATseqbase(BATmirror(r2), 0); *r1p = r1; @@ -2641,9 +2646,14 @@ BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, rcount = MIN(rcount, BATcount(sr)); if (lcount == 0 || rcount == 0) { r1 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + r2 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + if (r1 == NULL || r2 == NULL) { + BBPreclaim(r1); + BBPreclaim(r2); + return GDK_FAIL; + } BATseqbase(r1, 0); BATseqbase(BATmirror(r1), 0); - r2 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); BATseqbase(r2, 0); BATseqbase(BATmirror(r2), 0); *r1p = r1; diff --git a/gdk/gdk_join_legacy.c b/gdk/gdk_join_legacy.c --- a/gdk/gdk_join_legacy.c +++ b/gdk/gdk_join_legacy.c @@ -45,10 +45,12 @@ BATsemijoin(BAT *l, BAT *r) return BATcopy(l, l->htype, l->ttype, 0, TRANSIENT); if (BATcount(r) == 0) { bn = BATnew(l->htype, l->ttype, 0, TRANSIENT); - if (BAThdense(l)) - BATseqbase(bn, l->hseqbase); - if (BATtdense(l)) - BATseqbase(BATmirror(bn), l->tseqbase); + if (bn) { + if (BAThdense(l)) + BATseqbase(bn, l->hseqbase); + if (BATtdense(l)) + BATseqbase(BATmirror(bn), l->tseqbase); + } return bn; } diff --git a/gdk/gdk_sample.c b/gdk/gdk_sample.c --- a/gdk/gdk_sample.c +++ b/gdk/gdk_sample.c @@ -145,12 +145,20 @@ BATsample(BAT *b, BUN n) { /* empty sample size */ if (n == 0) { bn = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + if (bn == NULL) { + GDKerror("BATsample: memory allocation error"); + return NULL; + } BATsetcount(bn, 0); BATseqbase(bn, 0); BATseqbase(BATmirror(bn), 0); - /* sample size is larger than the input BAT, return all oids */ - } else if (n >= cnt) { + /* sample size is larger than the input BAT, return all oids */ + } else if (cnt <= n) { bn = BATnew(TYPE_void, TYPE_void, cnt, TRANSIENT); + if (bn == NULL) { + GDKerror("BATsample: memory allocation error"); + return NULL; + } BATsetcount(bn, cnt); BATseqbase(bn, 0); BATseqbase(BATmirror(bn), b->H->seq); diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -46,9 +46,13 @@ float nextafterf(float x, float y); } while (0) static BAT * -newempty(void) +newempty(const char *func) { BAT *bn = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT); + if (bn == NULL) { + GDKerror("%s: memory allocation error", func); + return NULL; + } BATseqbase(bn, 0); BATseqbase(BATmirror(bn), 0); return bn; @@ -867,7 +871,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, if (!li) { \ /* open range on left */ \ if (*(TYPE*)tl == MAXVALUE##TYPE) \ - return newempty(); \ + return newempty("BATsubselect"); \ /* vl < x === vl+1 <= x */ \ vl.v_##TYPE = NEXTVALUE##TYPE(*(TYPE*)tl); \ li = 1; \ @@ -885,7 +889,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, if (!hi) { \ /* open range on right */ \ if (*(TYPE*)th == MINVALUE##TYPE) \ - return newempty(); \ + return newempty("BATsubselect"); \ /* x < vh === x <= vh-1 */ \ vh.v_##TYPE = PREVVALUE##TYPE(*(TYPE*)th); \ hi = 1; \ @@ -970,7 +974,7 @@ BATsubselect(BAT *b, BAT *s, const void ",s=%s,anti=%d): trivially empty\n", BATgetId(b), BATcount(b), s ? BATgetId(s) : "NULL", anti); - return newempty(); + return newempty("BATsubselect"); } t = b->ttype; @@ -1019,7 +1023,7 @@ BATsubselect(BAT *b, BAT *s, const void "nil-nil range, nonil\n", BATgetId(b), BATcount(b), s ? BATgetId(s) : "NULL", anti); - return newempty(); + return newempty("BATsubselect"); } else if (equi && lnil) { /* antiselect for nil value: turn into range * select for nil-nil range (i.e. everything @@ -1059,7 +1063,7 @@ BATsubselect(BAT *b, BAT *s, const void ",s=%s,anti=%d): empty range\n", BATgetId(b), BATcount(b), s ? BATgetId(s) : "NULL", anti); - return newempty(); + return newempty("BATsubselect"); } if (equi && lnil && b->T->nonil) { /* return all nils, but there aren't any */ @@ -1067,7 +1071,7 @@ BATsubselect(BAT *b, BAT *s, const void ",s=%s,anti=%d): equi-nil, nonil\n", BATgetId(b), BATcount(b), s ? BATgetId(s) : "NULL", anti); - return newempty(); + return newempty("BATsubselect"); } if (!equi && !lval && !hval && lnil && b->T->nonil) { @@ -1378,7 +1382,7 @@ BATthetasubselect(BAT *b, BAT *s, const nil = ATOMnilptr(b->ttype); if (ATOMcmp(b->ttype, val, nil) == 0) - return newempty(); + return newempty("BATthetasubselect"); if (op[0] == '=' && ((op[1] == '=' && op[2] == 0) || op[2] == 0)) { /* "=" or "==" */ return BATsubselect(b, s, val, NULL, 1, 1, 0); diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1122,10 +1122,10 @@ GDKinit(opt *set, int setlen) GDKkey = BATnew(TYPE_void, TYPE_str, 100, TRANSIENT); GDKval = BATnew(TYPE_void, TYPE_str, 100, TRANSIENT); - if (GDKkey == NULL) + if (GDKkey == NULL || GDKval == NULL) { + /* no cleanup necessary before GDKfatal */ GDKfatal("GDKinit: Could not create environment BAT"); - if (GDKval == NULL) - GDKfatal("GDKinit: Could not create environment BAT"); + } BATseqbase(GDKkey,0); BATkey(GDKkey, BOUND2BTRUE); BATrename(GDKkey, "environment_key"); diff --git a/monetdb5/extras/sphinx/sphinx.c b/monetdb5/extras/sphinx/sphinx.c --- a/monetdb5/extras/sphinx/sphinx.c +++ b/monetdb5/extras/sphinx/sphinx.c @@ -37,7 +37,7 @@ * SIGNATURE: SPHINXsearchIndexLimit(str, str, int) : bat[oid,lng]; */ static str sphinx_searchIndexLimit(BAT **ret, /* put pointer to BAT[oid,int] record here. */ - str query, str index, int limit) + str query, str index, int limit) { int i; BAT *bn; @@ -54,8 +54,12 @@ sphinx_searchIndexLimit(BAT **ret, /* pu res = sphinx_query ( client, query, index, NULL ); if (!res || (res && res->num_matches == 0)) { bn = BATnew(TYPE_void, TYPE_lng, 0, TRANSIENT); + if (bn == NULL) + throw(MAL, "sphinx.searchIndex", MAL_MALLOC_FAIL); } else { bn = BATnew(TYPE_void, TYPE_lng, res->num_matches, TRANSIENT); + if (bn == NULL) + throw(MAL, "sphinx.searchIndex", MAL_MALLOC_FAIL); for ( i = 0; i < res->num_matches; i++ ) { lng sphinx_id = sphinx_get_id ( res, i ); o++; @@ -66,9 +70,9 @@ sphinx_searchIndexLimit(BAT **ret, /* pu sphinx_destroy (client); bn->hseqbase = 0; - bn->T->sorted = 0; - bn->T->revsorted = 0; - bn->T->nonil = 1; + bn->T->sorted = 0; + bn->T->revsorted = 0; + bn->T->nonil = 1; BATkey(BATmirror(bn), FALSE); *ret = bn; @@ -82,8 +86,7 @@ SPHINXsearchIndexLimit(int *ret, str *qu str msg = sphinx_searchIndexLimit(&b, *query, *index, *limit); if (msg) { - GDKfree(msg); - throw(MAL, "sphinx.searchIndex", "Cannot create Sphinx object"); + return msg; } assert(b != NULL); *ret = b->batCacheid; diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c --- a/monetdb5/mal/mal_interpreter.c +++ b/monetdb5/mal/mal_interpreter.c @@ -532,8 +532,11 @@ str runMALsequence(Client cntxt, MalBlkP runtimeProfileInit(cntxt, mb, stk); runtimeProfileBegin(cntxt, mb, stk, NULL, &runtimeProfileFunction); mb->starttime = GDKusec(); - if (cntxt->stimeout && cntxt->session && GDKusec()- cntxt->session > cntxt->stimeout) + if (cntxt->stimeout && cntxt->session && GDKusec()- cntxt->session > cntxt->stimeout) { + if ( backup != backups) GDKfree(backup); + if ( garbage != garbages) GDKfree(garbage); throw(MAL, "mal.interpreter", RUNTIME_SESSION_TIMEOUT); + } } stkpc = startpc; exceptionVar = -1; @@ -1155,7 +1158,8 @@ str runMALsequence(Client cntxt, MalBlkP stkpc++; } if (cntxt->qtimeout && GDKusec()- mb->starttime > cntxt->qtimeout){ - ret= createException(MAL, "mal.interpreter", RUNTIME_QRY_TIMEOUT); + if (ret == MAL_SUCCEED) + ret= createException(MAL, "mal.interpreter", RUNTIME_QRY_TIMEOUT); stkpc= mb->stop; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list