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
