Changeset: 9022024ba881 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9022024ba881
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk.h
gdk/gdk_aggr.c
monetdb5/mal/mal_authorize.c
monetdb5/modules/kernel/bat5.c
sql/backends/monet5/sql.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
Branch: default
Log Message:
More error checking and warning about unused results.
diffs (truncated from 540 to 300 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
@@ -19,11 +19,11 @@ int ATOMlen(int id, const void *v);
str ATOMname(int id);
ptr ATOMnil(int id);
int ATOMprint(int id, const void *val, stream *fd);
-gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force);
+gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force)
__attribute__((__warn_unused_result__));
void BATassertProps(BAT *b);
atomDesc BATatoms[];
BAT *BATattach(int tt, const char *heapfile, int role);
-gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
const void *c1, const void *c2, int li, int hi, BUN estimate);
+gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
const void *c1, const void *c2, int li, int hi, BUN estimate)
__attribute__((__warn_unused_result__));
BAT *BATcalcabsolute(BAT *b, BAT *s);
BAT *BATcalcadd(BAT *b1, BAT *b2, BAT *s, int tp, int abort_on_error);
BAT *BATcalcaddcst(BAT *b, const ValRecord *v, BAT *s, int tp, int
abort_on_error);
@@ -114,15 +114,15 @@ void BATcommit(BAT *b);
BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, int role);
BAT *BATconvert(BAT *b, BAT *s, int tp, int abort_on_error);
BUN BATcount_no_nil(BAT *b);
-gdk_return BATdel(BAT *b, BAT *d);
+gdk_return BATdel(BAT *b, BAT *d) __attribute__((__warn_unused_result__));
BAT *BATdense(oid hseq, oid tseq, BUN cnt) __attribute__((warn_unused_result));
BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate);
-gdk_return BATextend(BAT *b, BUN newcap);
+gdk_return BATextend(BAT *b, BUN newcap)
__attribute__((__warn_unused_result__));
void BATfakeCommit(BAT *b);
-gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps,
BUN n, int asc, int distinct);
+gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps,
BUN n, int asc, int distinct) __attribute__((__warn_unused_result__));
int BATgetaccess(BAT *b);
PROPrec *BATgetprop(BAT *b, int idx);
-gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s,
BAT *g, BAT *e, BAT *h);
+gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s,
BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__));
const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid
*maxp, BUN *ngrpp, BUN *startp, BUN *endp, const oid **candp, const oid
**candendp);
gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s,
int tp, int skip_nils, int abort_on_error);
BAT *BATgroupcount(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int
abort_on_error);
@@ -142,10 +142,10 @@ gdk_return BAThash(BAT *b, BUN masksize)
void BAThseqbase(BAT *b, oid o);
gdk_return BATimprints(BAT *b);
BAT *BATintersectcand(BAT *a, BAT *b);
-gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int
nil_matches, BUN estimate);
+gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int
nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
gdk_return BATkey(BAT *b, int onoff);
int BATkeyed(BAT *b);
-gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
int nil_matches, BUN estimate);
+gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
int nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
void *BATmax(BAT *b, void *aggr);
size_t BATmemsize(BAT *b, int dirty);
BAT *BATmergecand(BAT *a, BAT *b);
@@ -155,27 +155,27 @@ void BATmsync(BAT *b);
int BATordered(BAT *b);
int BATordered_rev(BAT *b);
gdk_return BATorderidx(BAT *b, int stable);
-gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, int nil_matches, BUN estimate);
+gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, int nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
gdk_return BATprint(BAT *b);
gdk_return BATprintcolumns(stream *s, int argc, BAT *argv[]);
gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, int skip_nils, int
abort_on_error, int nil_if_empty);
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);
-gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force);
+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);
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);
+gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
int nil_matches, BUN estimate) __attribute__((__warn_unused_result__));
gdk_return BATsetaccess(BAT *b, int mode);
void BATsetcapacity(BAT *b, BUN cnt);
void BATsetcount(BAT *b, BUN cnt);
void BATsetprop(BAT *b, int idx, int type, void *v);
BAT *BATslice(BAT *b, BUN low, BUN high);
-gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o,
BAT *g, int reverse, int stable);
-gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr);
+gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o,
BAT *g, int reverse, int stable) __attribute__((__warn_unused_result__));
+gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr)
__attribute__((__warn_unused_result__));
gdk_return BATsum(void *res, int tp, BAT *b, BAT *s, int skip_nils, int
abort_on_error, int nil_if_empty);
-gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, int op, int nil_matches, BUN estimate);
+gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, int op, int nil_matches, BUN estimate)
__attribute__((__warn_unused_result__));
BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op);
void BATtseqbase(BAT *b, oid o);
void BATundo(BAT *b);
@@ -204,10 +204,10 @@ void BBPshare(bat b);
gdk_return BBPsync(int cnt, bat *subcommit);
int BBPunfix(bat b);
void BBPunlock(void);
-gdk_return BUNappend(BAT *b, const void *right, bit force);
-gdk_return BUNdelete(BAT *b, oid o);
+gdk_return BUNappend(BAT *b, const void *right, bit force)
__attribute__((__warn_unused_result__));
+gdk_return BUNdelete(BAT *b, oid o) __attribute__((__warn_unused_result__));
BUN BUNfnd(BAT *b, const void *right);
-gdk_return BUNinplace(BAT *b, BUN p, const void *right, bit force);
+gdk_return BUNinplace(BAT *b, BUN p, const void *right, bit force)
__attribute__((__warn_unused_result__));
BAT *COLcopy(BAT *b, int tt, int writeable, int role);
BAT *COLnew(oid hseq, int tltype, BUN capacity, int role)
__attribute__((warn_unused_result));
size_t GDK_mem_maxsize;
@@ -273,7 +273,7 @@ str GDKstrndup(const char *s, size_t n)
void GDKsyserror(_In_z_ _Printf_format_string_ const char *format, ...)
__attribute__((__format__(__printf__, 1, 2)));
ThreadRec GDKthreads[THREADS];
size_t GDKuniqueid(size_t offset);
-gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int mayshare);
+gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int mayshare)
__attribute__((__warn_unused_result__));
lng GDKusec(void);
BAT *GDKval;
const char *GDKversion(void);
@@ -285,7 +285,7 @@ BUN HASHprobe(const Hash *h, const void
void HEAP_free(Heap *heap, var_t block);
void HEAP_initialize(Heap *heap, size_t nbytes, size_t nprivate, int
alignment);
var_t HEAP_malloc(Heap *heap, size_t nbytes);
-gdk_return HEAPextend(Heap *h, size_t size, int mayshare);
+gdk_return HEAPextend(Heap *h, size_t size, int mayshare)
__attribute__((__warn_unused_result__));
size_t HEAPmemsize(Heap *h);
size_t HEAPvmsize(Heap *h);
void IMPSdestroy(BAT *b);
@@ -483,8 +483,8 @@ BUN strHash(const char *s);
int strLen(const char *s);
int strNil(const char *s);
const char str_nil[2];
-gdk_return void_inplace(BAT *b, oid id, const void *val, bit force);
-BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force);
+gdk_return void_inplace(BAT *b, oid id, const void *val, bit force)
__attribute__((__warn_unused_result__));
+BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force)
__attribute__((__warn_unused_result__));
int win_mkdir(const char *, const int mode);
int win_rename(const char *, const char *);
int win_rmdir(const char *);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -952,7 +952,8 @@ typedef struct BATiter {
* These routines should be used to alloc free or extend heaps; they
* isolate you from the different ways heaps can be accessed.
*/
-gdk_export gdk_return HEAPextend(Heap *h, size_t size, int mayshare);
+gdk_export gdk_return HEAPextend(Heap *h, size_t size, int mayshare)
+ __attribute__ ((__warn_unused_result__));
gdk_export size_t HEAPvmsize(Heap *h);
gdk_export size_t HEAPmemsize(Heap *h);
@@ -1021,7 +1022,8 @@ gdk_export BAT *COLnew(oid hseq, int tlt
__attribute__((warn_unused_result));
gdk_export BAT *BATdense(oid hseq, oid tseq, BUN cnt)
__attribute__((warn_unused_result));
-gdk_export gdk_return BATextend(BAT *b, BUN newcap);
+gdk_export gdk_return BATextend(BAT *b, BUN newcap)
+ __attribute__ ((__warn_unused_result__));
/* internal */
gdk_export bte ATOMelmshift(int sz);
@@ -1260,7 +1262,8 @@ gdk_export bte ATOMelmshift(int sz);
bunfastapp_nocheck(b, _p, t, Tsize(b)); \
} while (0)
-gdk_export gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int
mayshare);
+gdk_export gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int
mayshare)
+ __attribute__ ((__warn_unused_result__));
gdk_export gdk_return BUNappend(BAT *b, const void *right, bit force)
__attribute__ ((__warn_unused_result__));
gdk_export gdk_return BATappend(BAT *b, BAT *n, BAT *s, bit force)
@@ -1271,8 +1274,10 @@ gdk_export gdk_return BUNdelete(BAT *b,
gdk_export gdk_return BATdel(BAT *b, BAT *d)
__attribute__ ((__warn_unused_result__));
-gdk_export gdk_return BUNinplace(BAT *b, BUN p, const void *right, bit force);
-gdk_export gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force);
+gdk_export gdk_return BUNinplace(BAT *b, BUN p, const void *right, bit force)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return BATreplace(BAT *b, BAT *p, BAT *n, bit force)
+ __attribute__ ((__warn_unused_result__));
/* Functions to perform a binary search on a sorted BAT.
* See gdk_search.c for details. */
@@ -1434,7 +1439,8 @@ gdk_export int BATgetaccess(BAT *b);
gdk_export gdk_return BATclear(BAT *b, int force);
gdk_export BAT *COLcopy(BAT *b, int tt, int writeable, int role);
-gdk_export gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT
*b, BAT *s, BAT *g, BAT *e, BAT *h);
+gdk_export gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT
*b, BAT *s, BAT *g, BAT *e, BAT *h)
+ __attribute__ ((__warn_unused_result__));
/*
* @- BAT Input/Output
@@ -1513,7 +1519,8 @@ gdk_export gdk_return BATprint(BAT *b);
gdk_export int BATkeyed(BAT *b);
gdk_export int BATordered(BAT *b);
gdk_export int BATordered_rev(BAT *b);
-gdk_export gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b,
BAT *o, BAT *g, int reverse, int stable);
+gdk_export gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b,
BAT *o, BAT *g, int reverse, int stable)
+ __attribute__ ((__warn_unused_result__));
gdk_export void GDKqsort(void *h, void *t, const void *base, size_t n, int hs,
int ts, int tpe);
@@ -2326,8 +2333,10 @@ gdk_export void GDKclrerr(void);
#include "gdk_utils.h"
/* functions defined in gdk_bat.c */
-gdk_export BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force);
-gdk_export gdk_return void_inplace(BAT *b, oid id, const void *val, bit force);
+gdk_export BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return void_inplace(BAT *b, oid id, const void *val, bit force)
+ __attribute__ ((__warn_unused_result__));
gdk_export BAT *BATattach(int tt, const char *heapfile, int role);
#ifdef NATIVE_WIN32
@@ -2807,16 +2816,24 @@ gdk_export BAT *BATselect(BAT *b, BAT *s
gdk_export BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char
*op);
gdk_export BAT *BATconstant(oid hseq, int tt, const void *val, BUN cnt, int
role);
-gdk_export gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr);
+gdk_export gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr)
+ __attribute__ ((__warn_unused_result__));
-gdk_export gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate);
-gdk_export gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate);
-gdk_export gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int op, int nil_matches, BUN estimate);
-gdk_export gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate);
+gdk_export gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int op, int nil_matches, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, int nil_matches, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
gdk_export BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN
estimate);
-gdk_export gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl,
BAT *sr, int nil_matches, BUN estimate);
-gdk_export gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate);
-gdk_export gdk_return BATrangejoin(BAT **r1p, BAT **r2p, BAT *l, BAT *rl, BAT
*rh, BAT *sl, BAT *sr, int li, int hi, BUN estimate);
+gdk_export gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl,
BAT *sr, int nil_matches, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
+gdk_export gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, const void *c1, const void *c2, int li, int hi, BUN estimate)
+ __attribute__ ((__warn_unused_result__));
+gdk_export 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_export BAT *BATproject(BAT *l, BAT *r);
gdk_export BAT *BATprojectchain(BAT **bats);
@@ -2827,7 +2844,8 @@ gdk_export BAT *BATunique(BAT *b, BAT *s
gdk_export BAT *BATmergecand(BAT *a, BAT *b);
gdk_export BAT *BATintersectcand(BAT *a, BAT *b);
-gdk_export gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands,
BAT *grps, BUN n, int asc, int distinct);
+gdk_export gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands,
BAT *grps, BUN n, int asc, int distinct)
+ __attribute__ ((__warn_unused_result__));
#include "gdk_calc.h"
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2531,7 +2531,8 @@ BATgroupquantile(BAT *b, BAT *g, BAT *e,
BATcheckorderidx(pb))) {
ords = (const oid *) (pb ? pb->torderidx->base :
b->torderidx->base) + ORDERIDXOFF;
} else {
- BATsort(NULL, &t1, NULL, b, NULL, g, 0, 0);
+ if (BATsort(NULL, &t1, NULL, b, NULL, g, 0, 0) !=
GDK_SUCCEED)
+ goto bunins_failed;
if (BATtdense(t1))
ords = NULL;
else
diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -424,7 +424,8 @@ AUTHchangeUsername(Client cntxt, const c
throw(MAL, "changeUsername", "user '%s' already exists",
newuser);
/* ok, just do it! (with force, because sql makes view over it) */
- BUNinplace(user, p, newuser, TRUE);
+ if (BUNinplace(user, p, newuser, TRUE) != GDK_SUCCEED)
+ throw(MAL, "changeUsername", GDK_EXCEPTION);
AUTHcommit();
return(MAL_SUCCEED);
}
@@ -475,7 +476,10 @@ AUTHchangePassword(Client cntxt, const c
/* ok, just overwrite the password field for this user */
assert(id == p);
- BUNinplace(pass, p, hash, TRUE);
+ if (BUNinplace(pass, p, hash, TRUE) != GDK_SUCCEED) {
+ GDKfree(hash);
+ throw(INVCRED, "changePassword", GDK_EXCEPTION);
+ }
GDKfree(hash);
AUTHcommit();
return(MAL_SUCCEED);
@@ -526,7 +530,10 @@ AUTHsetPassword(Client cntxt, const char
/* ok, just overwrite the password field for this user */
assert (p != BUN_NONE);
assert(id == p);
- BUNinplace(pass, p, hash, TRUE);
+ if (BUNinplace(pass, p, hash, TRUE) != GDK_SUCCEED) {
+ GDKfree(hash);
+ throw(MAL, "setPassword", GDK_EXCEPTION);
+ }
GDKfree(hash);
AUTHcommit();
return(MAL_SUCCEED);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list