Changeset: c25084ef3558 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c25084ef3558
Added Files:
        monetdb5/modules/mal/Tests/mosaic_none_qry2.mal
        monetdb5/modules/mal/Tests/mosaic_rle_qry2.mal
Modified Files:
        monetdb5/modules/mal/Makefile.ag
        monetdb5/modules/mal/Tests/All
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic_hdr.c
        monetdb5/modules/mal/mosaic_none.c
        monetdb5/modules/mal/mosaic_rle.c
Branch: mosaic
Log Message:

Silence compilers


diffs (truncated from 622 to 300 lines):

diff --git a/monetdb5/modules/mal/Makefile.ag b/monetdb5/modules/mal/Makefile.ag
--- a/monetdb5/modules/mal/Makefile.ag
+++ b/monetdb5/modules/mal/Makefile.ag
@@ -87,6 +87,6 @@ EXTRA_DIST = batExtensions.mal iterator.
        transaction.mal txtsim.mal tablet.mal tablet.h sample.mal json_util.mal 
\
        mal_mapi.mal mat.mal tokenizer.mal calc.mal \
        batcalc.mal batmtime.mal querylog.mal sysmon.mal mosaic.mal \
-       mosaic_none.c mosaic_rle.c
+       mosaic_none.c mosaic_rle.c mosaic_hdr.c
 
 EXTRA_DIST_DIR = Tests
diff --git a/monetdb5/modules/mal/Tests/All b/monetdb5/modules/mal/Tests/All
--- a/monetdb5/modules/mal/Tests/All
+++ b/monetdb5/modules/mal/Tests/All
@@ -72,7 +72,9 @@ mosaic_rle
 mosaic_mix
 
 mosaic_none_qry
+mosaic_none_qry2
 mosaic_rle_qry
+mosaic_rle_qry2
 #HAVE_RAPTOR?rdf
 
 # might show different output if openssl is compiled without full sha2
diff --git a/monetdb5/modules/mal/Tests/mosaic_none_qry2.mal 
b/monetdb5/modules/mal/Tests/mosaic_none_qry2.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/mosaic_none_qry2.mal
@@ -0,0 +1,56 @@
+# Compression of noncompressable column
+
+b:= bat.new(:oid,:int);
+bat.append(b,50);
+bat.append(b,19531015);
+bat.append(b,9);
+b:= bat.append(b,b);
+
+c:= bat.new(:oid,:oid);
+bat.append(c,0@0);
+bat.append(c,3@0);
+
+io.print(b);
+io.print(c);
+x:= mosaic.compress(b);
+#mosaic.dump(x);
+s:= algebra.subselect(b,c,0,50,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,false,true,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,false,true,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,true,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,true,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,true,true,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,true,true,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,50,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,50,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,50,nil:int,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,50,nil:int,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,nil:int,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,nil:int,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,nil:int,false,false,true);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,nil:int,false,false,true);
+io.print(xs);
+
diff --git a/monetdb5/modules/mal/Tests/mosaic_rle_qry2.mal 
b/monetdb5/modules/mal/Tests/mosaic_rle_qry2.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/mosaic_rle_qry2.mal
@@ -0,0 +1,58 @@
+# Compression of noncompressable column
+
+b:= bat.new(:oid,:int);
+bat.append(b,50);
+bat.append(b,50);
+bat.append(b,9);
+bat.append(b,9);
+bat.append(b,9);
+b:= bat.append(b,b);
+
+c:= bat.new(:oid,:oid);
+bat.append(c,0@0);
+bat.append(c,3@0);
+
+io.print(b);
+io.print(c);
+x:= mosaic.compress(b);
+#mosaic.dump(x);
+s:= algebra.subselect(b,c,0,50,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,false,true,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,false,true,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,true,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,true,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,0,50,true,true,false);
+io.print(s);
+xs:= mosaic.subselect(x,0,50,true,true,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,50,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,50,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,50,nil:int,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,50,nil:int,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,nil:int,false,false,false);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,nil:int,false,false,false);
+io.print(xs);
+
+s:= algebra.subselect(b,c,nil:int,nil:int,false,false,true);
+io.print(s);
+xs:= mosaic.subselect(x,nil:int,nil:int,false,false,true);
+io.print(xs);
+
diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c
--- a/monetdb5/modules/mal/mosaic.c
+++ b/monetdb5/modules/mal/mosaic.c
@@ -87,6 +87,7 @@ typedef struct MOSTASK{
 
        oid *lb, *rb;   // Collected oids from operations
        oid *cl;                // candidate admin
+       oid offset;             // seqbase offset
        lng     n;                      // element count in candidate list
 
        // collect compression statistics for the particular task
@@ -540,7 +541,8 @@ MOSsubselect(Client cntxt, MalBlkPtr mb,
        void *low, *hgh;
        int *ret, *bid, *cid= 0;
        int i;
-       BUN first =0, last = 0, cnt= 0;
+       BUN cnt = 0;
+       lng first =0, last = 0;
        BAT *b, *bn, *cand = NULL;
        str msg = MAL_SUCCEED;
        MOStask task;
@@ -596,12 +598,13 @@ MOSsubselect(Client cntxt, MalBlkPtr mb,
                }
                task->cl = (oid*) Tloc(cand, BUNfirst(cand));
                task->n = BATcount(cand);
+               task->offset = cand->tseqbase;
                first = *(oid*) task->src;
        } else 
                first = 0;
 
        // loop thru all the chunks and collect the partial results
-       if ( task->cl && task->n && (BUN) *task->cl > first)
+       if ( task->cl && task->n && *task->cl > (oid) first)
                first = (BUN)  *task->cl;
        MOSfindChunk(cntxt,task,first);
        while(task->blk && first < last ){
@@ -619,7 +622,7 @@ MOSsubselect(Client cntxt, MalBlkPtr mb,
                }
        }
        // derive the filling
-       cnt = task->lb - (oid*) Tloc(bn,BUNfirst(bn));
+       cnt = (BUN) (task->lb - (oid*) Tloc(bn,BUNfirst(bn)));
        BATsetcount(bn,cnt);
        BATseqbase(bn,b->hseqbase);
     bn->hdense = 1;
@@ -637,10 +640,9 @@ MOSsubselect(Client cntxt, MalBlkPtr mb,
 
 str MOSthetasubselect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
-       int idx, cndid =0, c= 0, anti =0, *ret, *bid;
+       int idx, cid =0,  *ret, *bid;
        BAT *b = 0, *cand = 0, *bn = NULL;
-       BUN cap= 0;
-       oid *cl = 0;
+       lng first,last, cnt=0;
        str msg= MAL_SUCCEED;
        char **oper;
        void *low;
@@ -651,7 +653,7 @@ str MOSthetasubselect(Client cntxt, MalB
        ret= (int*) getArgReference(stk,pci,0);
        bid= (int*) getArgReference(stk,pci,1);
        if( pci->argc == 5){ // candidate list included
-               cndid = *(int*) getArgReference(stk,pci, 2);
+               cid = *(int*) getArgReference(stk,pci, 2);
                idx = 3;
        } else idx = 2;
        low= (void*) getArgReference(stk,pci,idx+1);
@@ -659,47 +661,72 @@ str MOSthetasubselect(Client cntxt, MalB
 
        if( !isCompressed(*bid))
                return ALGthetasubselect1(ret,bid,low, (const char **)oper);
+       // determine the elements in the compressed structure
+       last = b->T->heap.count;
 
-       (void) cl;
-       (void) anti;
-       (void) cap;
-       if(cndid){
-               cand = BATdescriptor(cndid);
-               if( cand == NULL)
-                       throw(MAL,"mosaic.subselect",RUNTIME_OBJECT_MISSING);
-               cl = (oid*) Tloc(cand,BUNfirst(cand));\
-       }
-
-       // check the step direction
        task= (MOStask) GDKzalloc(sizeof(*task));
        if( task == NULL){
                BBPreleaseref(b->batCacheid);
-               if( cand)
-                       BBPreleaseref(cand->batCacheid);
                throw(MAL, "mosaic.subselect", RUNTIME_OBJECT_MISSING);
        }
+
+       // accumulator for the oids
+       bn = BATnew(TYPE_void, TYPE_oid, last, TRANSIENT);
+       if( bn == NULL){
+               BBPreleaseref(b->batCacheid);
+               throw(MAL, "mosaic.subselect", RUNTIME_OBJECT_MISSING);
+       }
+       task->lb = (oid*) Tloc(bn,BUNfirst(bn));
+
        MOSinit(task,b);
-       MOSfindChunk(cntxt,task,0);
+       // drag along the candidate list into the task descriptor
+       if (cid) {
+               cand = BATdescriptor(cid);
+               if (cand == NULL){
+                       BBPreleaseref(b->batCacheid);
+                       BBPreleaseref(bn->batCacheid);
+                       throw(MAL, "mosaic.subselect", RUNTIME_OBJECT_MISSING);
+               }
+               task->cl = (oid*) Tloc(cand, BUNfirst(cand));
+               task->offset = cand->tseqbase;
+               task->n = BATcount(cand);
+               first = *(oid*) task->src;
+       } else 
+               first = 0;
 
-       // loop thru all the chunks and collect the results
-       while(task->blk )
+       // loop thru all the chunks and collect the partial results
+       if ( task->cl && task->n && *task->cl > (oid) first)
+               first = (BUN)  *task->cl;
+       MOSfindChunk(cntxt,task,first);
+
+       while(task->blk && first < last ){
                switch(task->blk->tag){
                case MOSAIC_RLE:
+                       MOSthetasubselect_rle(cntxt,task,first,first + 
task->blk->cnt,low,*oper);
+                       first += task->blk->cnt;
                        MOSskip_rle(task);
                        break;
                case MOSAIC_NONE:
                default:
+                       MOSthetasubselect_none(cntxt,task,first,first + 
task->blk->cnt,low,*oper);
+                       first += task->blk->cnt;
                        MOSskip_none(task);
                }
+       }
+       // derive the filling
+       cnt = task->lb - (oid*) Tloc(bn,BUNfirst(bn));
        
-       if( cndid)
-               BBPreleaseref(cndid);
+       if( cid)
+               BBPreleaseref(cid);
        if( bn){
-               BATsetcount(bn,c);
+               BATsetcount(bn,cnt);
                bn->hdense = 1;
-               bn->hseqbase = 0;
                bn->hkey = 1;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to