Changeset: 827ec6d8453c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/827ec6d8453c
Modified Files:
        sql/backends/monet5/sql.c
        testing/tlstester.py
Branch: default
Log Message:

Merge with Aug2024 branch.


diffs (truncated from 364 to 300 lines):

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
@@ -4137,6 +4137,102 @@ SQLoptimizersUpdate(Client cntxt, MalBlk
        throw(SQL, "updateOptimizer", SQLSTATE(0A000) PROGRAM_NYI);
 }
 
+static str
+sql_storage_appendrow(BAT *bs, const char *sname, const char *tname, const 
char *cname,
+                                         int access, const char *tpname,
+                                         BAT *sch, BAT *tab, BAT *col, BAT 
*type, BAT *loc,
+                                         BAT *cnt, BAT *atom, BAT *size, BAT 
*heap, BAT *indices,
+                                         BAT *phash, BAT *sort, BAT *imprints, 
BAT *mode,
+                                         BAT *revsort, BAT *key, BAT *oidx)
+{
+       BATiter bsi = bat_iterator(bs);
+       lng sz;
+       int w;
+       bit bitval;
+
+       if (BUNappend(sch, sname, false) != GDK_SUCCEED ||
+               BUNappend(tab, tname, false) != GDK_SUCCEED ||
+               BUNappend(col, cname, false) != GDK_SUCCEED)
+               goto bailout1;
+       if (access == TABLE_WRITABLE) {
+               if (BUNappend(mode, "writable", false) != GDK_SUCCEED)
+                       goto bailout1;
+       } else if (access == TABLE_APPENDONLY) {
+               if (BUNappend(mode, "appendonly", false) != GDK_SUCCEED)
+                       goto bailout1;
+       } else if (access == TABLE_READONLY) {
+               if (BUNappend(mode, "readonly", false) != GDK_SUCCEED)
+                       goto bailout1;
+       } else {
+               if (BUNappend(mode, str_nil, false) != GDK_SUCCEED)
+                       goto bailout1;
+       }
+       if (BUNappend(type, tpname, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       sz = bsi.count;
+       if (BUNappend(cnt, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       if (BUNappend(loc, BBP_physical(bs->batCacheid), false) != GDK_SUCCEED)
+               goto bailout1;
+       w = bsi.width;
+       if (BUNappend(atom, &w, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       sz = (lng) bsi.hfree;
+       if (BUNappend(size, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       sz = bsi.vhfree;
+       if (BUNappend(heap, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       MT_rwlock_rdlock(&bs->thashlock);
+       /* one lock, two values: hash size, and
+        * whether we (may) have a hash */
+       sz = hashinfo(bs->thash, bs->batCacheid);
+       bitval = bs->thash != NULL;
+       MT_rwlock_rdunlock(&bs->thashlock);
+       if (BUNappend(indices, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       if (BUNappend(phash, &bitval, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       sz = 0;
+       if (BUNappend(imprints, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+       bitval = bsi.sorted;
+       if (!bitval && bsi.nosorted == 0)
+               bitval = bit_nil;
+       if (BUNappend(sort, &bitval, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       bitval = bsi.revsorted;
+       if (!bitval && bsi.norevsorted == 0)
+               bitval = bit_nil;
+       if (BUNappend(revsort, &bitval, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       bitval = bsi.key;
+       if (!bitval && bsi.nokey[0] == 0 && bsi.nokey[1] == 0)
+               bitval = bit_nil;
+       if (BUNappend(key, &bitval, false) != GDK_SUCCEED)
+               goto bailout1;
+
+       MT_lock_set(&bs->batIdxLock);
+       sz = bs->torderidx && bs->torderidx != (Heap *) 1 ? bs->torderidx->free 
: 0;
+       MT_lock_unset(&bs->batIdxLock);
+       if (BUNappend(oidx, &sz, false) != GDK_SUCCEED)
+               goto bailout1;
+       bat_iterator_end(&bsi);
+       return MAL_SUCCEED;
+  bailout1:
+       bat_iterator_end(&bsi);
+       throw(SQL, "sql.storage", GDK_EXCEPTION);
+}
+
 /*
  * Inspection of the actual storage footprint is a recurring question of users.
  * This is modelled as a generic SQL table producing function.
@@ -4148,13 +4244,10 @@ str
 sql_storage(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        BAT *sch, *tab, *col, *type, *loc, *cnt, *atom, *size, *heap, *indices, 
*phash, *sort, *imprints, *mode, *revsort, *key, *oidx, *bs = NULL;
-       BATiter bsi = bat_iterator(NULL);
        mvc *m = NULL;
        str msg = MAL_SUCCEED;
        sql_trans *tr;
        node *ncol;
-       int w;
-       bit bitval;
        bat *rsch = getArgReference_bat(stk, pci, 0);
        bat *rtab = getArgReference_bat(stk, pci, 1);
        bat *rcol = getArgReference_bat(stk, pci, 2);
@@ -4244,7 +4337,6 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                for (ncol = 
ol_first_node((t)->columns); ncol; ncol = ncol->next) {
                                                        sql_base *bc = 
ncol->data;
                                                        sql_column *c = 
(sql_column *) ncol->data;
-                                                       lng sz;
 
                                                        if( cname && 
strcmp(bc->name, cname) )
                                                                continue;
@@ -4254,88 +4346,14 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                goto bailout;
                                                        }
 
-                                                       bsi = bat_iterator(bs);
-                                                       /*printf("schema 
%s.%s.%s" , b->name, bt->name, bc->name); */
-                                                       if (BUNappend(sch, 
b->name, false) != GDK_SUCCEED ||
-                                                           BUNappend(tab, 
bt->name, false) != GDK_SUCCEED ||
-                                                           BUNappend(col, 
bc->name, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-                                                       if (c->t->access == 
TABLE_WRITABLE) {
-                                                               if 
(BUNappend(mode, "writable", false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                       } else if (c->t->access 
== TABLE_APPENDONLY) {
-                                                               if 
(BUNappend(mode, "appendonly", false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                       } else if (c->t->access 
== TABLE_READONLY) {
-                                                               if 
(BUNappend(mode, "readonly", false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                       } else {
-                                                               if 
(BUNappend(mode, str_nil, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                       }
-                                                       if (BUNappend(type, 
c->type.type->base.name, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       /*printf(" cnt "BUNFMT, 
bsi.count); */
-                                                       sz = bsi.count;
-                                                       if (BUNappend(cnt, &sz, 
false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       /*printf(" loc %s", 
BBP_physical(bs->batCacheid)); */
-                                                       if (BUNappend(loc, 
BBP_physical(bs->batCacheid), false) != GDK_SUCCEED)
-                                                               goto bailout1;
-                                                       /*printf(" width %d", 
bsi.width); */
-                                                       w = bsi.width;
-                                                       if (BUNappend(atom, &w, 
false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       sz = bsi.count << 
bsi.shift;
-                                                       if (BUNappend(size, 
&sz, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       sz = 
heapinfo(bs->tvheap, bs->batCacheid);
-                                                       if (BUNappend(heap, 
&sz, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       
MT_rwlock_rdlock(&bs->thashlock);
-                                                       /* one lock, two 
values: hash size, and
-                                                        * whether we (may) 
have a hash */
-                                                       sz = 
hashinfo(bs->thash, bs->batCacheid);
-                                                       bitval = bs->thash != 
NULL;
-                                                       
MT_rwlock_rdunlock(&bs->thashlock);
-                                                       if (BUNappend(indices, 
&sz, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       if (BUNappend(phash, 
&bitval, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       sz = 0;
-                                                       if (BUNappend(imprints, 
&sz, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-                                                       /*printf(" indices 
"BUNFMT, bs->thash?bs->thash->heap.size:0); */
-                                                       /*printf("\n"); */
-                                                       bitval = bsi.sorted;
-                                                       if (!bitval && 
bsi.nosorted == 0)
-                                                               bitval = 
bit_nil;
-                                                       if (BUNappend(sort, 
&bitval, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       bitval = bsi.revsorted;
-                                                       if (!bitval && 
bsi.norevsorted == 0)
-                                                               bitval = 
bit_nil;
-                                                       if (BUNappend(revsort, 
&bitval, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       bitval = BATtkey(bs);
-                                                       if (!bitval && 
bsi.nokey[0] == 0 && bsi.nokey[1] == 0)
-                                                               bitval = 
bit_nil;
-                                                       if (BUNappend(key, 
&bitval, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-
-                                                       sz = bs->torderidx && 
bs->torderidx != (Heap *) 1 ? bs->torderidx->free : 0;
-                                                       if (BUNappend(oidx, 
&sz, false) != GDK_SUCCEED)
-                                                               goto bailout1;
-                                                       bat_iterator_end(&bsi);
+                                                       msg = 
sql_storage_appendrow(
+                                                               bs, b->name, 
bt->name, bc->name,
+                                                               c->t->access, 
c->type.type->base.name,
+                                                               sch, tab, col, 
type, loc, cnt, atom, size,
+                                                               heap, indices, 
phash, sort, imprints, mode,
+                                                               revsort, key, 
oidx);
+                                                       if (msg != MAL_SUCCEED)
+                                                               goto bailout;
                                                }
                                        }
 
@@ -4345,7 +4363,6 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                        sql_idx *c = (sql_idx 
*) ncol->data;
                                                        if 
(idx_has_column(c->type)) {
                                                                bs = 
store->storage_api.bind_idx(tr, c, QUICK);
-                                                               lng sz;
 
                                                                if (bs == NULL) 
{
                                                                        msg = 
createException(SQL, "sql.storage", SQLSTATE(HY005) "Cannot access column 
descriptor");
@@ -4353,82 +4370,14 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                }
                                                                if( cname && 
strcmp(bc->name, cname) )
                                                                        
continue;
-                                                               bsi = 
bat_iterator(bs);
-                                                               
/*printf("schema %s.%s.%s" , b->name, bt->name, bc->name); */
-                                                               if 
(BUNappend(sch, b->name, false) != GDK_SUCCEED ||
-                                                                   
BUNappend(tab, bt->name, false) != GDK_SUCCEED ||
-                                                                   
BUNappend(col, bc->name, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               if 
(c->t->access == TABLE_WRITABLE) {
-                                                                       if 
(BUNappend(mode, "writable", false) != GDK_SUCCEED)
-                                                                               
goto bailout1;
-                                                               } else if 
(c->t->access == TABLE_APPENDONLY) {
-                                                                       if 
(BUNappend(mode, "appendonly", false) != GDK_SUCCEED)
-                                                                               
goto bailout1;
-                                                               } else if 
(c->t->access == TABLE_READONLY) {
-                                                                       if 
(BUNappend(mode, "readonly", false) != GDK_SUCCEED)
-                                                                               
goto bailout1;
-                                                               } else {
-                                                                       if 
(BUNappend(mode, str_nil, false) != GDK_SUCCEED)
-                                                                               
goto bailout1;
-                                                               }
-                                                               if 
(BUNappend(type, "oid", false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-
-                                                               /*printf(" cnt 
"BUNFMT, bsi.count); */
-                                                               sz = bsi.count;
-                                                               if 
(BUNappend(cnt, &sz, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-
-                                                               /*printf(" loc 
%s", BBP_physical(bs->batCacheid)); */
-                                                               if 
(BUNappend(loc, BBP_physical(bs->batCacheid), false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               /*printf(" 
width %d", bsi.width); */
-                                                               w = bsi.width;
-                                                               if 
(BUNappend(atom, &w, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               /*printf(" size 
"BUNFMT, tailsize(bs,bsi.count) + (bs->tvheap? bs->tvheap->size:0)); */
-                                                               sz = 
tailsize(bs, bsi.count);
-                                                               if 
(BUNappend(size, &sz, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-
-                                                               sz = bs->tvheap 
? bs->tvheap->size : 0;
-                                                               if 
(BUNappend(heap, &sz, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-
-                                                               
MT_rwlock_rdlock(&bs->thashlock);
-                                                               sz = bs->thash 
&& bs->thash != (Hash *) 1 ? bs->thash->heaplink.size + 
bs->thash->heapbckt.size : 0; /* HASHsize() */
-                                                               
MT_rwlock_rdunlock(&bs->thashlock);
-                                                               if 
(BUNappend(indices, &sz, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               bitval = 0; /* 
HASHispersistent(bs); */
-                                                               if 
(BUNappend(phash, &bitval, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-
-                                                               sz = 0;
-                                                               if 
(BUNappend(imprints, &sz, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               /*printf(" 
indices "BUNFMT, 
bs->thash?bs->thash->heaplink.size+bs->thash->heapbckt.size:0); */
-                                                               /*printf("\n"); 
*/
-                                                               bitval = 
bsi.sorted;
-                                                               if (!bitval && 
bsi.nosorted == 0)
-                                                                       bitval 
= bit_nil;
-                                                               if 
(BUNappend(sort, &bitval, false) != GDK_SUCCEED)
-                                                                       goto 
bailout1;
-                                                               bitval = 
bsi.revsorted;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to