Changeset: 565bf93c0020 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=565bf93c0020
Modified Files:
        clients/Tests/exports.stable.out
        gdk/ChangeLog.Mar2018
        gdk/gdk.h
        gdk/gdk_bat.c
        gdk/gdk_bbp.c
        gdk/gdk_storage.c
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/mal/bbp.c
        monetdb5/modules/mal/clients.c
        monetdb5/modules/mal/inspect.c
        monetdb5/modules/mal/mal_io.c
        monetdb5/modules/mal/mdb.c
Branch: Mar2018
Log Message:

BATroles now returns whether it succeeded.
GDKstrdup can fail.


diffs (184 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -159,7 +159,7 @@ BAT *BATproject(BAT *l, BAT *r);
 BAT *BATprojectchain(BAT **bats);
 gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT *rh, BAT 
*sl, BAT *sr, int li, int hi, BUN estimate) 
__attribute__((__warn_unused_result__));
 gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force) 
__attribute__((__warn_unused_result__));
-void BATroles(BAT *b, const char *tnme);
+gdk_return BATroles(BAT *b, const char *tnme);
 BAT *BATsample(BAT *b, BUN n);
 BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, 
int anti);
 gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, 
int nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
diff --git a/gdk/ChangeLog.Mar2018 b/gdk/ChangeLog.Mar2018
--- a/gdk/ChangeLog.Mar2018
+++ b/gdk/ChangeLog.Mar2018
@@ -1,6 +1,10 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Fri Feb 16 2018 Sjoerd Mullender <[email protected]>
+- Changed the return type of BATroles from void to gdk_return: it can
+  fail due to malloc failure.
+
 * Fri Feb  9 2018 Sjoerd Mullender <[email protected]>
 - Removed functions ALIGNsetH, ALIGNsetT, and CREATEview_ (mind the
   underscore).  The first can easily be replace by using BAThseqbase
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1347,7 +1347,7 @@ gdk_export void BATsetcount(BAT *b, BUN 
 gdk_export BUN BATgrows(BAT *b);
 gdk_export gdk_return BATkey(BAT *b, int onoff);
 gdk_export gdk_return BATmode(BAT *b, int onoff);
-gdk_export void BATroles(BAT *b, const char *tnme);
+gdk_export gdk_return BATroles(BAT *b, const char *tnme);
 gdk_export void BAThseqbase(BAT *b, oid o);
 gdk_export void BATtseqbase(BAT *b, oid o);
 gdk_export gdk_return BATsetaccess(BAT *b, int mode);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1530,17 +1530,18 @@ BATtseqbase(BAT *b, oid o)
        }
 }
 
-void
+gdk_return
 BATroles(BAT *b, const char *tnme)
 {
        if (b == NULL)
-               return;
+               return GDK_SUCCEED;
        if (b->tident && !default_ident(b->tident))
                GDKfree(b->tident);
        if (tnme)
                b->tident = GDKstrdup(tnme);
        else
                b->tident = BATstring_t;
+       return b->tident ? GDK_SUCCEED : GDK_FAIL;
 }
 
 /*
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1331,7 +1331,8 @@ BBPreadEntries(FILE *fp, int bbpversion)
                if (bn == NULL)
                        GDKfatal("BBPinit: cannot allocate memory for BAT.");
                bn->batCacheid = bid;
-               BATroles(bn, NULL);
+               if (BATroles(bn, NULL) != GDK_SUCCEED)
+                       GDKfatal("BBPinit: BATroles failed.");
                bn->batPersistence = PERSISTENT;
                bn->batCopiedtodisk = 1;
                bn->batRestricted = (properties & 0x06) >> 1;
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -987,8 +987,9 @@ BATprint(BAT *b)
        argv[0] = BATdense(b->hseqbase, b->hseqbase, BATcount(b));
        argv[1] = b;
        if (argv[0] && argv[1]) {
-               BATroles(argv[0], "h");
-               ret = BATprintcolumns(GDKstdout, 2, argv);
+               ret = BATroles(argv[0], "h");
+               if (ret == GDK_SUCCEED)
+                       ret = BATprintcolumns(GDKstdout, 2, argv);
        }
        if (argv[0])
                BBPunfix(argv[0]->batCacheid);
diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c
--- a/monetdb5/modules/kernel/bat5.c
+++ b/monetdb5/modules/kernel/bat5.c
@@ -869,7 +869,10 @@ BKCsetColumn(void *r, const bat *bid, co
                BBPunfix(b->batCacheid);
                throw(MAL, "bat.setColumn", ILLEGAL_ARGUMENT " Column name 
missing");
        }
-       BATroles(b, *tname);
+       if (BATroles(b, *tname) != GDK_SUCCEED) {
+               BBPunfix(b->batCacheid);
+               throw(MAL, "bat.setColumn", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+       }
        BBPunfix(b->batCacheid);
        return MAL_SUCCEED;
 }
diff --git a/monetdb5/modules/mal/bbp.c b/monetdb5/modules/mal/bbp.c
--- a/monetdb5/modules/mal/bbp.c
+++ b/monetdb5/modules/mal/bbp.c
@@ -19,11 +19,10 @@ static int
 pseudo(bat *ret, BAT *b, str X1,str X2) {
        char buf[BUFSIZ];
        snprintf(buf,BUFSIZ,"%s_%s", X1,X2);
-       if (BBPindex(buf) <= 0 && BBPrename(b->batCacheid, buf) != 0) {
+       if ((BBPindex(buf) <= 0 && BBPrename(b->batCacheid, buf) != 0) || 
BATroles(b,X2) != GDK_SUCCEED) {
                BBPunfix(b->batCacheid);
                return -1;
        }
-       BATroles(b,X2);
        *ret = b->batCacheid;
        BBPkeepref(*ret);
        return -0;
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -33,7 +33,8 @@ pseudo(bat *ret, BAT *b, str X1,str X2) 
        snprintf(buf,BUFSIZ,"%s_%s", X1,X2);
        if (BBPindex(buf) <= 0 && BBPrename(b->batCacheid, buf) != 0)
                return -1;
-       BATroles(b,X2);
+       if (BATroles(b,X2) != GDK_SUCCEED)
+               return -1;
        *ret = b->batCacheid;
        BBPkeepref(*ret);
        return 0;
diff --git a/monetdb5/modules/mal/inspect.c b/monetdb5/modules/mal/inspect.c
--- a/monetdb5/modules/mal/inspect.c
+++ b/monetdb5/modules/mal/inspect.c
@@ -28,7 +28,8 @@ pseudo(bat *ret, BAT *b, str X1,str X2, 
        snprintf(buf,BUFSIZ,"%s_%s_%s", X1,X2,X3);
        if (BBPindex(buf) <= 0 && BBPrename(b->batCacheid, buf) != 0)
                return -1;
-       BATroles(b,X2);
+       if (BATroles(b,X2) != GDK_SUCCEED)
+               return -1;
        *ret = b->batCacheid;
        BBPkeepref(*ret);
        return 0;
diff --git a/monetdb5/modules/mal/mal_io.c b/monetdb5/modules/mal/mal_io.c
--- a/monetdb5/modules/mal/mal_io.c
+++ b/monetdb5/modules/mal/mal_io.c
@@ -113,11 +113,17 @@ IOprintBoth(Client cntxt, MalBlkPtr mb, 
                                mnstr_printf(fp, "%s", tl);
                } else {
                        b[0] = BATdense(b[1]->hseqbase, b[1]->hseqbase, 
BATcount(b[1]));
-                       if( b[0]){
-                               BATroles(b[0], "h");
-                               BATprintcolumns(cntxt->fdout, 2, b);
+                       if (b[0] == NULL) {
+                               BBPunfix(b[1]->batCacheid);
+                               throw(MAL, "io.print", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+                       }
+                       if (BATroles(b[0], "h") != GDK_SUCCEED) {
                                BBPunfix(b[0]->batCacheid);
+                               BBPunfix(b[1]->batCacheid);
+                               throw(MAL, "io.print", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
+                       BATprintcolumns(cntxt->fdout, 2, b);
+                       BBPunfix(b[0]->batCacheid);
                }
                BBPunfix(b[1]->batCacheid);
                return MAL_SUCCEED;
diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c
--- a/monetdb5/modules/mal/mdb.c
+++ b/monetdb5/modules/mal/mdb.c
@@ -52,7 +52,8 @@ pseudo(bat *ret, BAT *b, const char *X1,
        snprintf(buf,BUFSIZ,"%s_%s_%s", X1,X2,X3);
        if (BBPindex(buf) <= 0 && BBPrename(b->batCacheid, buf) != 0)
                return -1;
-       BATroles(b,X2);
+       if (BATroles(b,X2) != GDK_SUCCEED)
+               return -1;
        *ret = b->batCacheid;
        BBPkeepref(*ret);
        return 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to