Changeset: aad07033f66f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=aad07033f66f
Modified Files:
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
        sql/scripts/76_compression.sql
Branch: mosaic
Log Message:

Allow for compression list
The analysis command can be given a list of optional compression schemes to use.


diffs (149 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
@@ -1323,24 +1323,31 @@ MOSjoin(Client cntxt, MalBlkPtr mb, MalS
 
 #define STEP MOSAIC_METHODS
 static int
-makepatterns(int *patterns, int size)
+makepatterns(int *patterns, int size, str compressions)
 {
        int i,j,k, idx, bit=1, step = MOSAIC_METHODS - 1;
        int lim= 8*7*6*5*4*3*2;
-       
-       for(k=0, i=0; i<lim && k <size; i++){
+       int candidate[MOSAIC_METHODS]= {0};
+
+       for( i = 0; i < MOSAIC_METHODS; i++)
+               candidate[i] = strstr(compressions,MOSfiltername[i]) != 0;
+
+       for( k=0, i=0; i<lim && k <size; i++){
                patterns[k]=0;
                idx =i;
                while(idx > 0) {
-                       if( idx % step ) 
+                       if( idx % step && candidate[ idx % step]) 
                                        patterns[k] |= 1 <<(idx % step);
                        idx /= step;
                }
+
+               // weed out duplicates
                for( j=0; j< k; j++)
                        if(patterns[k] == patterns[j]) break;
                if( j < k ) continue;
                
 #ifdef _MOSAIC_DEBUG_
+               mnstr_printf(GDKout,"#");
                for(j=0, bit=1; j < MOSAIC_METHODS-1; j++){
                        mnstr_printf(GDKout,"%d", (patterns[k] & bit) > 0);
                        bit *=2;
@@ -1421,7 +1428,7 @@ MOSanalyseInternal(Client cntxt, int thr
 
 #define CANDIDATES 256  /* all three combinations */
 void
-MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT *boutput, BAT *bfactor, 
lng sample)
+MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT *boutput, BAT *bfactor, 
str compressions)
 {
        int i,j,k,cases, bit=1, ret, bid= b->batCacheid;
        BUN cnt=  BATcount(b);
@@ -1431,7 +1438,7 @@ MOSanalyseReport(Client cntxt, BAT *b, B
        char technique[CANDIDATES]={0}, *t =  technique;
        dbl xf[CANDIDATES], factor;
 
-       cases = makepatterns(pattern,CANDIDATES);
+       cases = makepatterns(pattern,CANDIDATES, compressions);
        task = (MOStask) GDKzalloc(sizeof(*task));
        if( task == NULL)
                return;
@@ -1447,7 +1454,7 @@ MOSanalyseReport(Client cntxt, BAT *b, B
                        task->filter[j]= (pattern[i] & bit)>0;
                        bit *=2;
                }
-               MOScompressInternal(cntxt, &ret, &bid, task, sample, 0);
+               MOScompressInternal(cntxt, &ret, &bid, task, 0, 0);
                
                // analyse result to detect a new combination
                for(k=0, j=0, bit=1; j < MOSAIC_METHODS-1; j++){
@@ -1654,7 +1661,7 @@ MOSoptimize(Client cntxt, MalBlkPtr mb, 
 
        (void) mb;
 
-       cases = makepatterns(pattern,CANDIDATES);
+       cases = makepatterns(pattern,CANDIDATES,NULL);
        task= (MOStask) GDKzalloc(sizeof(*task));
        if( task == NULL)
                throw(MAL, "mosaic.mosaic", MAL_MALLOC_FAIL);
diff --git a/monetdb5/modules/mal/mosaic.h b/monetdb5/modules/mal/mosaic.h
--- a/monetdb5/modules/mal/mosaic.h
+++ b/monetdb5/modules/mal/mosaic.h
@@ -220,7 +220,7 @@ mosaic_export str MOSdump(Client cntxt, 
 mosaic_export str MOSlayout(Client cntxt, BAT *b, BAT *btech, BAT *bcount, BAT 
*binput, BAT *boutput, BAT *bproperties);
 mosaic_export str MOSsliceInternal(Client cntxt, bat *slices, BUN size, BAT 
*b);
 mosaic_export int MOSanalyseInternal(Client cntxt, int threshold, MOStask 
task, bat bid);
-mosaic_export void MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT 
*output, BAT *factor, lng sample);
+mosaic_export void MOSanalyseReport(Client cntxt, BAT *b, BAT *btech, BAT 
*output, BAT *factor, str compressions);
 mosaic_export str MOSoptimize(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mosaic_export str MOSslice(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 mosaic_export void MOSblk(MosaicBlk blk);
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
@@ -586,7 +586,7 @@ alter_table(Client cntxt, mvc *sql, char
                                return msg;
                        // TODO check:allocate_delta(sql->session->tr, nc);
                        d = nc->data;
-                       assert(nc->base.allocated == 1);
+                       //assert(nc->base.allocated == 1);
                        nc->base.rtime = nc->base.wtime = 
sql->session->tr->wtime;
                        d->bid = bid;
                        mvc_storage(sql, nc, c->storage_type);
@@ -4812,12 +4812,14 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                                        /* just 
take a sample */
                                                                        if 
(cnt1 > 512)
                                                                                
cnt1 = cnt2 = 512;
-                                                                       
BATloop(bn, p, q) {
-                                                                               
str s = BUNtail(bi, p);
-                                                                               
if (s != NULL && strcmp(s, str_nil))
-                                                                               
        sum += (int) strlen(s);
-                                                                               
if (--cnt1 <= 0)
-                                                                               
        break;
+                                                                       if 
(BATcount(bn)){
+                                                                               
BATloop(bn, p, q) {
+                                                                               
        str s = BUNtail(bi, p);
+                                                                               
        if (s != NULL && strcmp(s, str_nil))
+                                                                               
                sum += (int) strlen(s);
+                                                                               
        if (--cnt1 <= 0)
+                                                                               
                break;
+                                                                               
}
                                                                        }
                                                                        if 
(cnt2)
                                                                                
w = (int) (sum / cnt2);
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -486,6 +486,11 @@ pattern mosaicLayout(sch:str,tbl:str,col
 address sql_mosaicLayout
 comment "Return a table with detailed compression information ";
 
+pattern mosaicAnalysis(sch:str,tbl:str,col:str,compression:str)(
+       technique:bat[:oid,:str],
+       outputsize:bat[:oid,:lng],
+       factor:bat[:oid,:dbl])
+address sql_mosaicAnalysis;
 pattern mosaicAnalysis(sch:str,tbl:str,col:str)(
        technique:bat[:oid,:str],
        outputsize:bat[:oid,:lng],
diff --git a/sql/scripts/76_compression.sql b/sql/scripts/76_compression.sql
--- a/sql/scripts/76_compression.sql
+++ b/sql/scripts/76_compression.sql
@@ -38,3 +38,10 @@ returns table(
        outputsize bigint,      -- after compression
        factor double           -- compression factor
 ) external name sql."mosaicAnalysis";
+
+create function mosaic.analysis(sch string, tbl string, col string, 
compressions string)
+returns table(
+       technique string,       -- compression techniques being used
+       outputsize bigint,      -- after compression
+       factor double           -- compression factor
+) external name sql."mosaicAnalysis";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to