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