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

Reply via email to