Changeset: 024496432997 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=024496432997
Modified Files:
        gdk/gdk.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_bat2time.c
        sql/backends/monet5/sql_cast.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_round_impl.h
        sql/backends/monet5/vaults/bam/bam_lib.c
        sql/backends/monet5/vaults/fits/fits.c
        sql/backends/monet5/vaults/shp/shp.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
        sql/storage/bat/res_table.c
Branch: default
Log Message:

ALL calls to BUNappend are now checked.  Added GCC function attribute to keep 
it that way.


diffs (truncated from 1176 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1261,7 +1261,8 @@ gdk_export bte ATOMelmshift(int sz);
        } while (0)
 
 gdk_export gdk_return GDKupgradevarheap(BAT *b, var_t v, int copyall, int 
mayshare);
-gdk_export gdk_return BUNappend(BAT *b, const void *right, bit force);
+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);
 
 gdk_export gdk_return BUNdelete(BAT *b, oid o);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -2409,7 +2409,8 @@ mvc_scalar_value_wrap(Client cntxt, MalB
 
        // scalar values are single-column result sets
        res_id = mvc_result_table(b->mvc, mb->tag, 1, 1, NULL);
-       mvc_result_value(b->mvc, *tn, *cn, *type, *digits, *scale, p, mtype);
+       if (mvc_result_value(b->mvc, *tn, *cn, *type, *digits, *scale, p, 
mtype))
+               throw(SQL, "sql.exportValue", "failed");
        if (b->output_format == OFMT_NONE) {
                return MAL_SUCCEED;
        }
@@ -4038,41 +4039,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
        if (sch == NULL || tab == NULL || col == NULL || type == NULL || mode 
== NULL || loc == NULL || imprints == NULL || 
            sort == NULL || cnt == NULL || atom == NULL || size == NULL || heap 
== NULL || indices == NULL || phash == NULL ||
            revsort == NULL || key == NULL || oidx == NULL) {
-               if (sch)
-                       BBPunfix(sch->batCacheid);
-               if (tab)
-                       BBPunfix(tab->batCacheid);
-               if (col)
-                       BBPunfix(col->batCacheid);
-               if (mode)
-                       BBPunfix(mode->batCacheid);
-               if (loc)
-                       BBPunfix(loc->batCacheid);
-               if (cnt)
-                       BBPunfix(cnt->batCacheid);
-               if (type)
-                       BBPunfix(type->batCacheid);
-               if (atom)
-                       BBPunfix(atom->batCacheid);
-               if (size)
-                       BBPunfix(size->batCacheid);
-               if (heap)
-                       BBPunfix(heap->batCacheid);
-               if (indices)
-                       BBPunfix(indices->batCacheid);
-               if (phash)
-                       BBPunfix(phash->batCacheid);
-               if (imprints)
-                       BBPunfix(imprints->batCacheid);
-               if (sort)
-                       BBPunfix(sort->batCacheid);
-               if (revsort)
-                       BBPunfix(revsort->batCacheid);
-               if (key)
-                       BBPunfix(key->batCacheid);
-               if (oidx)
-                       BBPunfix(oidx->batCacheid);
-               throw(SQL, "sql.storage", MAL_MALLOC_FAIL);
+               goto bailout;
        }
        if( pci->argc - pci->retc >= 1)
                sname = *getArgReference_str(stk, pci, pci->retc);
@@ -4109,25 +4076,34 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                        
throw(SQL, "sql.storage", "Can not access column");
 
                                                                
/*printf("schema %s.%s.%s" , b->name, bt->name, bc->name); */
-                                                               BUNappend(sch, 
b->name, FALSE);
-                                                               BUNappend(tab, 
bt->name, FALSE);
-                                                               BUNappend(col, 
bc->name, FALSE);
-                                                               if 
(c->t->access == TABLE_WRITABLE)
-                                                                       
BUNappend(mode, "writable", FALSE);
-                                                               else if 
(c->t->access == TABLE_APPENDONLY)
-                                                                       
BUNappend(mode, "appendonly", FALSE);
-                                                               else if 
(c->t->access == TABLE_READONLY)
-                                                                       
BUNappend(mode, "readonly", FALSE);
-                                                               else
-                                                                       
BUNappend(mode, 0, FALSE);
-                                                               BUNappend(type, 
c->type.type->sqlname, FALSE);
+                                                               if 
(BUNappend(sch, b->name, FALSE) != GDK_SUCCEED ||
+                                                                   
BUNappend(tab, bt->name, FALSE) != GDK_SUCCEED ||
+                                                                   
BUNappend(col, bc->name, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
+                                                               if 
(c->t->access == TABLE_WRITABLE) {
+                                                                       if 
(BUNappend(mode, "writable", FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
+                                                               } else if 
(c->t->access == TABLE_APPENDONLY) {
+                                                                       if 
(BUNappend(mode, "appendonly", FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
+                                                               } else if 
(c->t->access == TABLE_READONLY) {
+                                                                       if 
(BUNappend(mode, "readonly", FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
+                                                               } else {
+                                                                       if 
(BUNappend(mode, 0, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
+                                                               }
+                                                               if 
(BUNappend(type, c->type.type->sqlname, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                /*printf(" cnt 
"BUNFMT, BATcount(bn)); */
                                                                sz = 
BATcount(bn);
-                                                               BUNappend(cnt, 
&sz, FALSE);
+                                                               if 
(BUNappend(cnt, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                /*printf(" loc 
%s", BBP_physical(bn->batCacheid)); */
-                                                               BUNappend(loc, 
BBP_physical(bn->batCacheid), FALSE);
+                                                               if 
(BUNappend(loc, BBP_physical(bn->batCacheid), FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
                                                                /*printf(" 
width %d", bn->twidth); */
                                                                w = bn->twidth;
                                                                if (bn->ttype 
== TYPE_str) {
@@ -4149,42 +4125,52 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                        if 
(cnt2)
                                                                                
w = (int) (sum / cnt2);
                                                                }
-                                                               BUNappend(atom, 
&w, FALSE);
+                                                               if 
(BUNappend(atom, &w, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                sz = 
BATcount(bn) * bn->twidth; 
-                                                               BUNappend(size, 
&sz, FALSE);
+                                                               if 
(BUNappend(size, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                sz = 
heapinfo(bn->tvheap, bn->batCacheid);
-                                                               BUNappend(heap, 
&sz, FALSE);
+                                                               if 
(BUNappend(heap, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                sz = 
hashinfo(bn->thash, bn->batCacheid);
-                                                               
BUNappend(indices, &sz, FALSE);
+                                                               if 
(BUNappend(indices, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                bitval = 0; /* 
HASHispersistent(bn); */
-                                                               
BUNappend(phash, &bitval, FALSE);
+                                                               if 
(BUNappend(phash, &bitval, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                sz = 
IMPSimprintsize(bn);
-                                                               
BUNappend(imprints, &sz, FALSE);
+                                                               if 
(BUNappend(imprints, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
                                                                /*printf(" 
indices "BUNFMT, bn->thash?bn->thash->heap->size:0); */
                                                                /*printf("\n"); 
*/
 
                                                                bitval = 
BATtordered(bn);
                                                                if (!bitval && 
bn->tnosorted == 0)
                                                                        bitval 
= bit_nil;
-                                                               BUNappend(sort, 
&bitval, FALSE);
+                                                               if 
(BUNappend(sort, &bitval, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                bitval = 
BATtrevordered(bn);
                                                                if (!bitval && 
bn->tnorevsorted == 0)
                                                                        bitval 
= bit_nil;
-                                                               
BUNappend(revsort, &bitval, FALSE);
+                                                               if 
(BUNappend(revsort, &bitval, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                bitval = 
BATtkey(bn);
                                                                if (!bitval && 
bn->tnokey[0] == 0 && bn->tnokey[1] == 0)
                                                                        bitval 
= bit_nil;
-                                                               BUNappend(key, 
&bitval, FALSE);
+                                                               if 
(BUNappend(key, &bitval, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
 
                                                                sz = 
bn->torderidx && bn->torderidx != (Heap *) 1 ? bn->torderidx->free : 0;
-                                                               BUNappend(oidx, 
&sz, FALSE);
+                                                               if 
(BUNappend(oidx, &sz, FALSE) != GDK_SUCCEED)
+                                                                       goto 
bailout;
                                                                
BBPunfix(bn->batCacheid);
                                                        }
 
@@ -4202,25 +4188,34 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                        if( 
cname && strcmp(bc->name, cname) )
                                                                                
continue;
                                                                        
/*printf("schema %s.%s.%s" , b->name, bt->name, bc->name); */
-                                                                       
BUNappend(sch, b->name, FALSE);
-                                                                       
BUNappend(tab, bt->name, FALSE);
-                                                                       
BUNappend(col, bc->name, FALSE);
-                                                                       if 
(c->t->access == TABLE_WRITABLE)
-                                                                               
BUNappend(mode, "writable", FALSE);
-                                                                       else if 
(c->t->access == TABLE_APPENDONLY)
-                                                                               
BUNappend(mode, "appendonly", FALSE);
-                                                                       else if 
(c->t->access == TABLE_READONLY)
-                                                                               
BUNappend(mode, "readonly", FALSE);
-                                                                       else
-                                                                               
BUNappend(mode, 0, FALSE);
-                                                                       
BUNappend(type, "oid", FALSE);
+                                                                       if 
(BUNappend(sch, b->name, FALSE) != GDK_SUCCEED ||
+                                                                           
BUNappend(tab, bt->name, FALSE) != GDK_SUCCEED ||
+                                                                           
BUNappend(col, bc->name, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
+                                                                       if 
(c->t->access == TABLE_WRITABLE) {
+                                                                               
if (BUNappend(mode, "writable", FALSE) != GDK_SUCCEED)
+                                                                               
        goto bailout;
+                                                                       } else 
if (c->t->access == TABLE_APPENDONLY) {
+                                                                               
if (BUNappend(mode, "appendonly", FALSE) != GDK_SUCCEED)
+                                                                               
        goto bailout;
+                                                                       } else 
if (c->t->access == TABLE_READONLY) {
+                                                                               
if (BUNappend(mode, "readonly", FALSE) != GDK_SUCCEED)
+                                                                               
        goto bailout;
+                                                                       } else {
+                                                                               
if (BUNappend(mode, 0, FALSE) != GDK_SUCCEED)
+                                                                               
        goto bailout;
+                                                                       }
+                                                                       if 
(BUNappend(type, "oid", FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
 
                                                                        
/*printf(" cnt "BUNFMT, BATcount(bn)); */
                                                                        sz = 
BATcount(bn);
-                                                                       
BUNappend(cnt, &sz, FALSE);
+                                                                       if 
(BUNappend(cnt, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
 
                                                                        
/*printf(" loc %s", BBP_physical(bn->batCacheid)); */
-                                                                       
BUNappend(loc, BBP_physical(bn->batCacheid), FALSE);
+                                                                       if 
(BUNappend(loc, BBP_physical(bn->batCacheid), FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        
/*printf(" width %d", bn->twidth); */
                                                                        w = 
bn->twidth;
                                                                        if 
(bn->ttype == TYPE_str) {
@@ -4242,37 +4237,47 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                                
if (cnt2)
                                                                                
        w = (int) (sum / cnt2);
                                                                        }
-                                                                       
BUNappend(atom, &w, FALSE);
+                                                                       if 
(BUNappend(atom, &w, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        
/*printf(" size "BUNFMT, tailsize(bn,BATcount(bn)) + (bn->tvheap? 
bn->tvheap->size:0)); */
                                                                        sz = 
tailsize(bn, BATcount(bn));
-                                                                       
BUNappend(size, &sz, FALSE);
+                                                                       if 
(BUNappend(size, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
 
                                                                        sz = 
bn->tvheap ? bn->tvheap->size : 0;
-                                                                       
BUNappend(heap, &sz, FALSE);
+                                                                       if 
(BUNappend(heap, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
 
                                                                        sz = 
bn->thash && bn->thash != (Hash *) 1 ? bn->thash->heap->size : 0; /* HASHsize() 
*/
-                                                                       
BUNappend(indices, &sz, FALSE);
+                                                                       if 
(BUNappend(indices, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        bitval 
= 0; /* HASHispersistent(bn); */
-                                                                       
BUNappend(phash, &bitval, FALSE);
+                                                                       if 
(BUNappend(phash, &bitval, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
 
                                                                        sz = 
IMPSimprintsize(bn);
-                                                                       
BUNappend(imprints, &sz, FALSE);
+                                                                       if 
(BUNappend(imprints, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        
/*printf(" indices "BUNFMT, bn->thash?bn->thash->heap->size:0); */
                                                                        
/*printf("\n"); */
                                                                        bitval 
= BATtordered(bn);
                                                                        if 
(!bitval && bn->tnosorted == 0)
                                                                                
bitval = bit_nil;
-                                                                       
BUNappend(sort, &bitval, FALSE);
+                                                                       if 
(BUNappend(sort, &bitval, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        bitval 
= BATtrevordered(bn);
                                                                        if 
(!bitval && bn->tnorevsorted == 0)
                                                                                
bitval = bit_nil;
-                                                                       
BUNappend(revsort, &bitval, FALSE);
+                                                                       if 
(BUNappend(revsort, &bitval, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        bitval 
= BATtkey(bn);
                                                                        if 
(!bitval && bn->tnokey[0] == 0 && bn->tnokey[1] == 0)
                                                                                
bitval = bit_nil;
-                                                                       
BUNappend(key, &bitval, FALSE);
+                                                                       if 
(BUNappend(key, &bitval, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        sz = 
bn->torderidx && bn->torderidx != (Heap *) 1 ? bn->torderidx->free : 0;
-                                                                       
BUNappend(oidx, &sz, FALSE);
+                                                                       if 
(BUNappend(oidx, &sz, FALSE) != GDK_SUCCEED)
+                                                                               
goto bailout;
                                                                        
BBPunfix(bn->batCacheid);
                                                                }
                                                        }
@@ -4298,6 +4303,43 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
        BBPkeepref(*rkey = key->batCacheid);
        BBPkeepref(*roidx = oidx->batCacheid);
        return MAL_SUCCEED;
+
+  bailout:
+       if (sch)
+               BBPunfix(sch->batCacheid);
+       if (tab)
+               BBPunfix(tab->batCacheid);
+       if (col)
+               BBPunfix(col->batCacheid);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to