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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list