Changeset: dd058b7431d3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd058b7431d3
Modified Files:
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic.mal
        monetdb5/modules/mal/mosaic_dictionary.c
        monetdb5/modules/mal/mosaic_frame.c
Branch: mosaic
Log Message:

Fixes non-initialized struct.
Moving the task descriptor out of place led to uninitialized values.


diffs (190 lines):

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
@@ -252,6 +252,7 @@ MOScompressInternal(Client cntxt, int *r
                // initialize the non-compressed read pointer
                task->src = Tloc(bsrc, BUNfirst(bsrc));
                task->elm = BATcount(bsrc);
+               task->start = 0;
                task->stop = BATcount(bsrc);
                task->size = bsrc->T->heap.free;
                task->timer = GDKusec();
@@ -279,6 +280,7 @@ MOScompressInternal(Client cntxt, int *r
                }
                task->src = Tloc(bcompress, BUNfirst(bcompress));
                task->elm = BATcount(bcompress);
+               task->start = 0;
                task->stop = BATcount(bsrc);
                task->size = bcompress->T->heap.free;
                task->timer = GDKusec();
@@ -455,7 +457,6 @@ MOScompressInternal(Client cntxt, int *r
                BBPreleaseref(bcompress->batCacheid);
        }
        task->hdr->factor = (task->xsize ==0 ? 0:(flt)task->size/task->xsize);
-       GDKfree(task);
 #ifdef _DEBUG_MOSAIC_
        MOSdumpInternal(cntxt,bcompress);
 #endif
@@ -488,7 +489,9 @@ MOScompress(Client cntxt, MalBlkPtr mb, 
                for( i = 0; i< MOSAIC_METHODS; i++)
                        task->filter[i]= 1;
 
-       return MOScompressInternal(cntxt, (int*) getArgReference(stk,pci,0), 
(int*) getArgReference(stk,pci,1), task, 0, flg);
+       prop= MOScompressInternal(cntxt, (int*) getArgReference(stk,pci,0), 
(int*) getArgReference(stk,pci,1), task, 0, flg);
+       GDKfree(task);
+       return prop;
 }
 
 // bulk decompress a heap
@@ -1303,7 +1306,7 @@ MOSanalyse(Client cntxt, MalBlkPtr mb, M
                }
                cand++;
        }
-       if( top == 0) { properties[0]="compressed"; top++;}
+       if( top == 0) { properties[0]="mosaic"; top++;}
 
 
        if( pci->argc > cand ){
@@ -1362,36 +1365,41 @@ str
 MOSmosaic(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        int ply;
-       char * properties;
        MOStask task;
-       int i,ret;
+       int i,mx,ret;
        bat bid;
+       float xf[MOSAIC_METHODS];
 
-       (void) task;
-       (void) ply;
-       (void) i;
        (void) mb;
        (void) cntxt;
-       (void) bid;
 
        task= (MOStask) GDKzalloc(sizeof(*task));
        if( task == NULL)
                throw(MAL, "mosaic.mosaic", MAL_MALLOC_FAIL);
 
+       bid = *getArgReference_int(stk,pci,1);
        ply = *getArgReference_int(stk,pci,2);
-       properties = *getArgReference_str(stk,pci,1);
 
-       if( properties && !strstr(properties,"mosaic"))
-               for( i = 0; i< MOSAIC_METHODS; i++)
-                       task->filter[i]= strstr(properties,MOSfiltername[i]) != 
0;
-       else
-               for( i = 0; i< MOSAIC_METHODS; i++)
+       for( ; ply > 0; ply--){
+               for( i = 0; i< MOSAIC_METHODS - 1; i++)
+                       xf[i]=0;
+
+               for( i = 1; i< MOSAIC_METHODS - 1; i++){
                        task->filter[i]= 1;
 #ifdef _DEBUG_MOSAIC_
-               mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t", bid, 
BBP_physical(bid), type);
+                       mnstr_printf(cntxt->fdout,"#%d\t%-8s\t", bid, 
BBP_physical(bid));
 #endif
-
-               MOScompressInternal(cntxt, &ret, &bid, task, 0, TRUE);
+                       MOScompressInternal(cntxt, &ret, &bid, task, 0, TRUE);
+                       xf[i] = xfactor;
+                       task->filter[i]= 0;
+                       if( ret != bid)
+                               BBPdecref(ret, TRUE);
+               }
+               for(mx =0, i = 1; i< MOSAIC_METHODS - 1; i++)
+                       mx = xf[mx] < xf[i] ? i: mx;
+               mnstr_printf(cntxt->fdout,"#best strategy %s 
%9.5f\n",MOSfiltername[mx],xf[mx]);
+       }
+       GDKfree(task);
        
        return MAL_SUCCEED;
 }
diff --git a/monetdb5/modules/mal/mosaic.mal b/monetdb5/modules/mal/mosaic.mal
--- a/monetdb5/modules/mal/mosaic.mal
+++ b/monetdb5/modules/mal/mosaic.mal
@@ -32,6 +32,10 @@ pattern analyse(b:int)
 address MOSanalyse
 comment "Apply default heap compression on a specific column";
 
+pattern optimize(bid:int, ply:int)
+address MOSmosaic
+comment "Perform a search thru the compression space";
+
 pattern dump(b:bat[:oid,:any])
 address MOSdump
 comment "Dump the compressed structure";
diff --git a/monetdb5/modules/mal/mosaic_dictionary.c 
b/monetdb5/modules/mal/mosaic_dictionary.c
--- a/monetdb5/modules/mal/mosaic_dictionary.c
+++ b/monetdb5/modules/mal/mosaic_dictionary.c
@@ -148,7 +148,7 @@ MOSskip_dictionary(Client cntxt, MOStask
                        }\
        hdr->bits = 1;\
        hdr->mask =1;\
-       for( i=1 ; i < (BUN) hdr->dictsize-1; i *=2){\
+       for( i=2 ; i < (BUN) hdr->dictsize; i *=2){\
                hdr->bits++;\
                hdr->mask = (hdr->mask <<1) | 1;\
        }\
@@ -168,7 +168,7 @@ MOScreatedictionary(Client cntxt, MOStas
        hdr->dictsize = 0;
        switch(ATOMstorage(task->type)){
        case TYPE_sht: makeDict(sht); break;
-       case TYPE_int: makeDict(int); break;
+       case TYPE_lng: makeDict(lng); break;
        case TYPE_oid: makeDict(oid); break;
        case TYPE_wrd: makeDict(wrd); break;
        case TYPE_flt: makeDict(flt); break;
@@ -176,9 +176,9 @@ MOScreatedictionary(Client cntxt, MOStas
 #ifdef HAVE_HGE
        case TYPE_hge: makeDict(hge); break;
 #endif
-       case TYPE_lng:
-               {       lng *val = ((lng*)task->src) + task->start;
-                       lng *dict = (lng*)hdr->dict,v;
+       case TYPE_int:
+               {       int *val = ((int*)task->src) + task->start;
+                       int *dict = (int*)hdr->dict,v;
 
                        for(i =task->start; i< task->stop; i++, val++){
                                for(j= 0; j< hdr->dictsize; j++)
@@ -209,7 +209,7 @@ MOScreatedictionary(Client cntxt, MOStas
                                        }
                        hdr->bits = 1;
                        hdr->mask =1;
-                       for( i=1 ; i < (BUN) hdr->dictsize-1; i *=2){
+                       for( i=2 ; i < (BUN) hdr->dictsize; i *=2){
                                hdr->bits++;
                                hdr->mask = (hdr->mask <<1) | 1;
                        }
diff --git a/monetdb5/modules/mal/mosaic_frame.c 
b/monetdb5/modules/mal/mosaic_frame.c
--- a/monetdb5/modules/mal/mosaic_frame.c
+++ b/monetdb5/modules/mal/mosaic_frame.c
@@ -146,7 +146,7 @@ MOSskip_frame(Client cntxt, MOStask task
                        }\
        hdr->framebits = 1;\
        hdr->mask =1;\
-       for( i=1 ; i < (BUN) hdr->framesize-1; i *=2){\
+       for( i=2 ; i < (BUN) hdr->framesize; i *=2){\
                hdr->framebits++;\
                hdr->mask = (hdr->mask <<1) | 1;\
        }\
@@ -198,6 +198,7 @@ MOScreateframe(Client cntxt, MOStask tas
                                } else
                                        cnt[j]++;
                        }
+                       //assert(hdr->framesize);
                        // sort it
                        for(i=0; i< (BUN) hdr->framesize; i++)
                                for(j=i+1; j< hdr->framesize; j++)
@@ -208,7 +209,7 @@ MOScreateframe(Client cntxt, MOStask tas
                                        }
                        hdr->framebits = 1;
                        hdr->mask =1;
-                       for( i=1 ; i < (BUN) hdr->framesize-1; i *=2){
+                       for( i=2 ; i < (BUN) hdr->framesize; i *=2){
                                hdr->framebits++;
                                hdr->mask = (hdr->mask <<1) | 1;
                        }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to