Changeset: 64209a29b3cb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64209a29b3cb
Modified Files:
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic.h
        monetdb5/modules/mal/mosaic.mal
        monetdb5/modules/mal/mosaic_delta.c
        monetdb5/modules/mal/mosaic_dict.c
        monetdb5/modules/mal/mosaic_linear.c
        monetdb5/modules/mal/mosaic_none.c
        monetdb5/modules/mal/mosaic_rle.c
        monetdb5/modules/mal/mosaic_zone.c
        monetdb5/optimizer/opt_mosaic.c
Branch: mosaic
Log Message:

Add date and daytime for compression


diffs (truncated from 548 to 300 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
@@ -49,9 +49,11 @@ static void
 MOSdumpTask(Client cntxt,MOStask task)
 {
        int i;
+       flt perc = task->size/100.0;
+
        mnstr_printf(cntxt->fdout,"# ");
-       mnstr_printf(cntxt->fdout,"clk " LLFMT"\tsizes "LLFMT"\t"LLFMT 
"\t%10.2fx\t", 
-               task->timer,task->size,task->xsize, task->xsize ==0 ? 
0:(flt)task->size/task->xsize);
+       mnstr_printf(cntxt->fdout,"clk " LLFMT"\tsizes "LLFMT"\t"LLFMT 
"\t%3.0f%%\t%10.2fx\t", 
+               task->timer,task->size,task->xsize, task->xsize/perc, 
task->xsize ==0 ? 0:(flt)task->size/task->xsize);
        for ( i=0; i < MOSAIC_METHODS; i++)
        if( task->blks[i])
                mnstr_printf(cntxt->fdout, "%s\t"LLFMT "\t"LLFMT "\t" , 
filtername[i], task->blks[i], task->elms[i]);
@@ -1092,14 +1094,20 @@ MOSanalyseInternal(Client cntxt, BUN thr
        case TYPE_oid:
        case TYPE_flt:
        case TYPE_dbl:
-               mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t"BUNFMT"\t", bid, 
BBP_logical(bid), type, BATcount(b));
+               mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t"BUNFMT"\t", bid, 
BBP_physical(bid), type, BATcount(b));
                MOScompressInternal(cntxt, &ret, &bid, 0);
+               if( ret != bid)
+                       BBPdecref(ret,TRUE);
+       case TYPE_str:
                break;
        default:
-               if( b->ttype == TYPE_timestamp){
-                       mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t"BUNFMT"\t", 
bid, BBP_logical(bid), type, BATcount(b));
+               if( b->ttype == TYPE_timestamp || b->ttype == TYPE_date || 
b->ttype == TYPE_daytime){
+                       mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t"BUNFMT"\t", 
bid, BBP_physical(bid), type, BATcount(b));
                        MOScompressInternal(cntxt, &ret, &bid, 0);
-               }
+                       if( ret != bid)
+                               BBPdecref(ret,TRUE);
+               } else
+                       mnstr_printf(cntxt->fdout,"#%d\t%-8s\t%s\t"BUNFMT"\t 
illegal compression type %s\n", bid, BBP_logical(bid), type, BATcount(b), 
getTypeName(b->ttype));
        }
        GDKfree(type);
        BBPreleaseref(bid);
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
@@ -132,6 +132,8 @@ float nextafterf(float x, float y);
 #define PREVVALUEoid(x) ((x) - 1)
 #define PREVVALUEflt(x) nextafterf((x), -GDK_flt_max)
 #define PREVVALUEdbl(x) nextafter((x), -GDK_dbl_max)
+#define PREVVALUEdate(x) ((x) - 1)
+#define PREVVALUEdaytime(x) ((x) - 1)
 
 #define NEXTVALUEbit(x) ((x) + 1)
 #define NEXTVALUEbte(x) ((x) + 1)
@@ -141,6 +143,8 @@ float nextafterf(float x, float y);
 #define NEXTVALUEoid(x) ((x) + 1)
 #define NEXTVALUEflt(x) nextafterf((x), GDK_flt_max)
 #define NEXTVALUEdbl(x) nextafter((x), GDK_dbl_max)
+#define NEXTVALUEdate(x) ((x) + 1)
+#define NEXTVALUEdaytime(x) ((x) + 1)
 
 // skip until you hit a candidate
 #define MOSskipit()\
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
@@ -54,6 +54,14 @@ pattern subselect(b:bat[:oid,:timestamp]
 address MOSsubselect
 comment "Overloaded selection routine";
 
+pattern subselect(b:bat[:oid,:date], low:date, high:date, li:bit, hi:bit, 
anti:bit) :bat[:oid,:oid]
+address MOSsubselect
+comment "Overloaded selection routine";
+
+pattern subselect(b:bat[:oid,:daytime], low:daytime, high:daytime, li:bit, 
hi:bit, anti:bit) :bat[:oid,:oid]
+address MOSsubselect
+comment "Overloaded selection routine";
+
 pattern subselect(b:bat[:oid,:bte], cand:bat[:oid,:oid], low:bte, high:bte, 
li:bit, hi:bit, anti:bit) :bat[:oid,:oid]
 address MOSsubselect;
 
@@ -79,6 +87,14 @@ pattern subselect(b:bat[:oid,:timestamp]
 address MOSsubselect
 comment "Overloaded selection routine";
 
+pattern subselect(b:bat[:oid,:date], cand:bat[:oid,:oid], low:date, high:date, 
li:bit, hi:bit, anti:bit) :bat[:oid,:oid]
+address MOSsubselect
+comment "Overloaded selection routine";
+
+pattern subselect(b:bat[:oid,:daytime], cand:bat[:oid,:oid], low:daytime, 
high:daytime, li:bit, hi:bit, anti:bit) :bat[:oid,:oid]
+address MOSsubselect
+comment "Overloaded selection routine";
+
 pattern thetasubselect(b:bat[:oid,:bte], low:bte, oper:str) :bat[:oid,:oid]
 address MOSthetasubselect;
 
@@ -104,6 +120,14 @@ pattern thetasubselect(b:bat[:oid,:times
 address MOSthetasubselect
 comment "Overloaded selection routine";
 
+pattern thetasubselect(b:bat[:oid,:date], low:date, oper:str) :bat[:oid,:oid]
+address MOSthetasubselect
+comment "Overloaded selection routine";
+
+pattern thetasubselect(b:bat[:oid,:daytime], low:daytime, oper:str) 
:bat[:oid,:oid]
+address MOSthetasubselect
+comment "Overloaded selection routine";
+
 pattern thetasubselect(b:bat[:oid,:bte], c:bat[:oid,:oid], low:bte, oper:str) 
:bat[:oid,:oid]
 address MOSthetasubselect;
 
@@ -129,6 +153,14 @@ pattern thetasubselect(b:bat[:oid,:times
 address MOSthetasubselect
 comment "Overloaded selection routine";
 
+pattern thetasubselect(b:bat[:oid,:date], c:bat[:oid,:oid], low:date, 
oper:str) :bat[:oid,:oid]
+address MOSthetasubselect
+comment "Overloaded selection routine";
+
+pattern thetasubselect(b:bat[:oid,:daytime], c:bat[:oid,:oid], low:daytime, 
oper:str) :bat[:oid,:oid]
+address MOSthetasubselect
+comment "Overloaded selection routine";
+
 pattern leftfetchjoin(b:bat[:oid,:oid], cand:bat[:oid,:bte]) :bat[:oid,:bte]
 address MOSleftfetchjoin;
 
@@ -154,6 +186,14 @@ pattern leftfetchjoin(b:bat[:oid,:oid], 
 address MOSleftfetchjoin
 comment "Overloaded leftfetchjoin operation";
 
+pattern leftfetchjoin(b:bat[:oid,:oid], cand:bat[:oid,:date]) :bat[:oid,:date]
+address MOSleftfetchjoin
+comment "Overloaded leftfetchjoin operation";
+
+pattern leftfetchjoin(b:bat[:oid,:oid], cand:bat[:oid,:daytime]) 
:bat[:oid,:daytime]
+address MOSleftfetchjoin
+comment "Overloaded leftfetchjoin operation";
+
 pattern join(b:bat[:oid,:any_1], gen:bat[:oid,:any_1]) 
(l:bat[:oid,:oid],r:bat[:oid,:oid])
 address MOSjoin
 comment "Overloaded join operation";
diff --git a/monetdb5/modules/mal/mosaic_delta.c 
b/monetdb5/modules/mal/mosaic_delta.c
--- a/monetdb5/modules/mal/mosaic_delta.c
+++ b/monetdb5/modules/mal/mosaic_delta.c
@@ -45,6 +45,10 @@ MOSadvance_delta(MOStask task)
        default:
                if( task->type == TYPE_timestamp)
                        task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(timestamp) + MOScnt(blk)-1)); 
+               if( task->type == TYPE_date)
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(date) + MOScnt(blk)-1)); 
+               if( task->type == TYPE_daytime)
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(daytime) + MOScnt(blk)-1)); 
        }
 }
 
@@ -371,6 +375,10 @@ MOSsubselect_delta(Client cntxt,  MOStas
                }
                        break;
                default:
+                       if( task->type == TYPE_daytime)
+                               subselect_delta(daytime);
+                       if( task->type == TYPE_date)
+                               subselect_delta(date);
                        if( task->type == TYPE_timestamp)
                                {       lng val= *(lng*) (((char*) task->blk) + 
MosaicBlkSize);
                                        int lownil = 
timestamp_isnil(*(timestamp*)low);
@@ -542,6 +550,10 @@ MOSthetasubselect_delta(Client cntxt,  M
                } 
                break;
        default:
+                       if( task->type == TYPE_daytime)
+                               thetasubselect_delta(daytime); 
+                       if( task->type == TYPE_date)
+                               thetasubselect_delta(date); 
                        if( task->type == TYPE_timestamp)
                                thetasubselect_delta(lng); 
        }
@@ -587,6 +599,10 @@ MOSleftfetchjoin_delta(Client cntxt,  MO
                }
                break;
                default:
+                       if (task->type == TYPE_daytime)
+                               leftfetchjoin_delta(daytime); 
+                       if (task->type == TYPE_date)
+                               leftfetchjoin_delta(date); 
                        if (task->type == TYPE_timestamp)
                                leftfetchjoin_delta(lng); 
        }
@@ -637,6 +653,10 @@ MOSjoin_delta(Client cntxt,  MOStask tas
                }
                break;
                default:
+                       if (task->type == TYPE_daytime)
+                               join_delta(daytime); 
+                       if (task->type == TYPE_date)
+                               join_delta(date); 
                        if (task->type == TYPE_timestamp)
                                join_delta(lng); 
        }
diff --git a/monetdb5/modules/mal/mosaic_dict.c 
b/monetdb5/modules/mal/mosaic_dict.c
--- a/monetdb5/modules/mal/mosaic_dict.c
+++ b/monetdb5/modules/mal/mosaic_dict.c
@@ -57,6 +57,8 @@ MOSdump_dict(Client cntxt, MOStask task)
                for(i=0; i< *size; i++)
                mnstr_printf(cntxt->fdout,"lng [%d] "LLFMT, i, ((lng*) 
val)[i]); break;
        default:
+               if( task->type == TYPE_date){
+               }
                if( task->type == TYPE_timestamp){
                }
        }
@@ -74,6 +76,8 @@ MOSadvance_dict(MOStask task)
        default:
                if( task->type == TYPE_timestamp)
                                task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(timestamp)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); 
+               if( task->type == TYPE_date)
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); 
        }
 }
 
@@ -247,6 +251,8 @@ MOSdecompress_dict(Client cntxt, MOStask
                }
                break;
        default:
+               if( task->type == TYPE_date)
+                       DICTdecompress(date);
                if( task->type == TYPE_timestamp)
                        DICTdecompress(timestamp);
        }
@@ -405,6 +411,10 @@ MOSsubselect_dict(Client cntxt,  MOStask
        }
        break;
        default:
+               if( task->type == TYPE_date)
+                       subselect_dict(date);
+               if( task->type == TYPE_daytime)
+                       subselect_dict(daytime);
                if( task->type == TYPE_timestamp)
                {       lng *dict= (lng*) (((char*) task->blk) + 2 * 
MosaicBlkSize );
                        bte *idx = (bte*) (((char*) task->blk) + 2 * 
MosaicBlkSize + dictsize * sizeof(lng));
diff --git a/monetdb5/modules/mal/mosaic_linear.c 
b/monetdb5/modules/mal/mosaic_linear.c
--- a/monetdb5/modules/mal/mosaic_linear.c
+++ b/monetdb5/modules/mal/mosaic_linear.c
@@ -64,9 +64,12 @@ MOSdump_linear(Client cntxt, MOStask tas
        case TYPE_dbl:
                mnstr_printf(cntxt->fdout,"flt  %f %f", *(dbl*) 
linear_base(blk), *(dbl*) linear_step(task,blk)); break;
        default:
-               if( task->type == TYPE_timestamp){
-                       mnstr_printf(cntxt->fdout,"int "LLFMT" " LLFMT, *(lng*) 
linear_base(blk), *(lng*) linear_step(task,blk)); break;
-               }
+               if( task->type == TYPE_daytime)
+                       mnstr_printf(cntxt->fdout,"daytime %d %d", *(int*) 
linear_base(blk), *(int*) linear_step(task,blk)); 
+               if( task->type == TYPE_date)
+                       mnstr_printf(cntxt->fdout,"date %d %d", *(int*) 
linear_base(blk), *(int*) linear_step(task,blk)); 
+               if( task->type == TYPE_timestamp)
+                       mnstr_printf(cntxt->fdout,"int "LLFMT" " LLFMT, *(lng*) 
linear_base(blk), *(lng*) linear_step(task,blk)); 
        }
        mnstr_printf(cntxt->fdout,"\n");
 }
@@ -84,9 +87,12 @@ MOSadvance_linear(MOStask task)
        case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(flt))); break;
        case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(dbl))); break;
        default:
-               if( task->type == TYPE_timestamp){
+               if( task->type == TYPE_daytime)
+                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(daytime)) ); 
+               if( task->type == TYPE_date)
+                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(date)) ); 
+               if( task->type == TYPE_timestamp)
                        task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(lng)) ); 
-               }
        }
 }
 
@@ -380,9 +386,12 @@ MOSsubselect_linear(Client cntxt,  MOSta
        }
        break;
        default:
-               if( task->type == TYPE_timestamp){
+               if( task->type == TYPE_daytime)
+                       subselect_linear(daytime); 
+               if( task->type == TYPE_date)
+                       subselect_linear(date); 
+               if( task->type == TYPE_timestamp)
                        subselect_linear(lng); 
-               }
        }
        task->lb = o;
        return MAL_SUCCEED;
@@ -493,9 +502,12 @@ MOSthetasubselect_linear(Client cntxt,  
                }
                break;
        default:
-               if( task->type == TYPE_timestamp){
+               if( task->type == TYPE_date)
+                       thetasubselect_linear(date); 
+               if( task->type == TYPE_daytime)
+                       thetasubselect_linear(daytime); 
+               if( task->type == TYPE_timestamp)
                        thetasubselect_linear(lng); 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to