Changeset: e73b0cbf5666 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e73b0cbf5666
Modified Files:
monetdb5/modules/mosaic/mosaic_delta.c
monetdb5/modules/mosaic/mosaic_dictionary.c
monetdb5/modules/mosaic/mosaic_frame.c
monetdb5/modules/mosaic/mosaic_linear.c
monetdb5/modules/mosaic/mosaic_prefix.c
monetdb5/modules/mosaic/mosaic_runlength.c
Branch: mosaic
Log Message:
Fix checksum handling
diffs (165 lines):
diff --git a/monetdb5/modules/mosaic/mosaic_delta.c
b/monetdb5/modules/mosaic/mosaic_delta.c
--- a/monetdb5/modules/mosaic/mosaic_delta.c
+++ b/monetdb5/modules/mosaic/mosaic_delta.c
@@ -176,12 +176,13 @@ MOSestimate_delta(Client cntxt, MOStask
BUN limit = task->stop - task->start > MOSlimit()?
MOSlimit():task->stop - task->start;\
task->dst = MOScodevector(task); \
*(TYPE*)task->dst = val;\
+ hdr->checksum.sum##TYPE += *v;\
task->dst += sizeof(TYPE);\
for(v++,i =1; i<limit; i++,v++){\
- hdr->checksum.sum##TYPE += *v;\
delta = *v -val;\
if ( EXPR )\
break;\
+ hdr->checksum.sum##TYPE += *v;\
*(bte*)task->dst++ = (bte) delta;\
val = *v;\
}\
diff --git a/monetdb5/modules/mosaic/mosaic_dictionary.c
b/monetdb5/modules/mosaic/mosaic_dictionary.c
--- a/monetdb5/modules/mosaic/mosaic_dictionary.c
+++ b/monetdb5/modules/mosaic/mosaic_dictionary.c
@@ -390,17 +390,7 @@ MOSdecompress_dictionary(Client cntxt, M
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: DICTdecompress(sht); break;
case TYPE_int: DICTdecompress(int); break;
- case TYPE_lng: //DICTdecompress(lng); break;
-{ BUN lim = MOSgetCnt(blk);
- base = (BitVector) MOScodevector(task);
- for(i = 0; i < lim; i++){
- j= getBitVector(base,i,(int) hdr->bits);
- ((lng*)task->src)[i] = task->hdr->dict.vallng[j];
- hdr->checksum2.sumlng += task->hdr->dict.vallng[j];
- }
- task->src += i * sizeof(lng);\
-}
- break;
+ case TYPE_lng: DICTdecompress(lng); break;
case TYPE_oid: DICTdecompress(oid); break;
case TYPE_flt: DICTdecompress(flt); break;
case TYPE_dbl: DICTdecompress(dbl); break;
diff --git a/monetdb5/modules/mosaic/mosaic_frame.c
b/monetdb5/modules/mosaic/mosaic_frame.c
--- a/monetdb5/modules/mosaic/mosaic_frame.c
+++ b/monetdb5/modules/mosaic/mosaic_frame.c
@@ -342,11 +342,11 @@ MOSestimate_frame(Client cntxt, MOStask
base[0]=0;\
for(i =0; i<limit; i++, val++){\
delta = *val - frame;\
- hdr->checksum.sum##TPE += delta;\
MOSfind(j,task->hdr->frame.val##TPE,delta,0,hdr->framesize);\
if(j == hdr->framesize || task->hdr->frame.val##TPE[j] !=
delta) \
break;\
else {\
+ hdr->checksum.sum##TPE += delta;\
hdr->framefreq[j]++;\
MOSincCnt(blk,1);\
framecompress(base,i,hdr->framebits,j);\
diff --git a/monetdb5/modules/mosaic/mosaic_linear.c
b/monetdb5/modules/mosaic/mosaic_linear.c
--- a/monetdb5/modules/mosaic/mosaic_linear.c
+++ b/monetdb5/modules/mosaic/mosaic_linear.c
@@ -237,11 +237,12 @@ MOSestimate_linear(Client cntxt, MOStask
TYPE step = *v - val;\
BUN limit = task->stop - task->start >= MOSlimit()? task->start +
MOSlimit():task->stop;\
*(TYPE*) linear_base(blk) = val;\
+ hdr->checksum.sum##TYPE += val;\
*(TYPE*) linear_step(task,blk) = step;\
for(i=1; i<limit; i++, val = *v++){\
if ( *v - val != step)\
break;\
- hdr->checksum.sum##TYPE += val;\
+ hdr->checksum.sum##TYPE += *v;\
} MOSsetCnt(blk, i);\
task->dst = ((char*) blk)+ wordaligned(MosaicBlkSize + 2 *
sizeof(TYPE),MosaicBlkRec);\
}
@@ -314,17 +315,7 @@ MOSdecompress_linear(Client cntxt, MOSta
#ifdef HAVE_HGE
case TYPE_hge: LINEARdecompress(hge); break;
#endif
- case TYPE_int:
- { int val = *(int*) linear_base(blk) ;
- int step = *(int*) linear_step(task,blk);
- BUN lim= MOSgetCnt(blk);
- for(i = 0; i < lim; i++){
- ((int*)task->src)[i] = val + (int)(i * step);
- hdr->checksum2.sumint += ((int*)task->src)[i];
- }
- task->src += i * sizeof(int);
- }
- break;
+ case TYPE_int: LINEARdecompress(int); break;
case TYPE_str:
// we only have to look at the index width, not the values
switch(task->bsrc->twidth){
diff --git a/monetdb5/modules/mosaic/mosaic_prefix.c
b/monetdb5/modules/mosaic/mosaic_prefix.c
--- a/monetdb5/modules/mosaic/mosaic_prefix.c
+++ b/monetdb5/modules/mosaic/mosaic_prefix.c
@@ -125,7 +125,8 @@ MOSlayout_prefix(Client cntxt, MOStask t
void
MOSadvance_prefix(Client cntxt, MOStask task)
{
- int bits = 0, bytes= 0;
+ int bits = 0;
+ size_t bytes= 0;
int size;
(void) cntxt;
@@ -562,7 +563,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
//mnstr_printf(cntxt->fdout,"decompress bits %d mask %o
val %d\n",bits,m,val);
for(i = 0; i < lim; i++){
v = decompress(base,i,bits);
- hdr->checksum.sumsht += v;
+ hdr->checksum2.sumsht += v;
*w++ = v;
}
}
@@ -578,7 +579,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
//mnstr_printf(cntxt->fdout,"decompress bits %d mask %o
val %d\n",bits,m,val);
for(i = 0; i < lim; i++){
v =decompress(base,i,bits);
- hdr->checksum.sumsht += v;
+ hdr->checksum2.sumsht += v;
*w++ = v;
}
}
@@ -594,7 +595,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
//mnstr_printf(cntxt->fdout,"decompress bits %d mask %o
val %d\n",bits,m,val);
for(i = 0; i < lim; i++){
v = decompress(base,i,bits);
- hdr->checksum.sumint += v;
+ hdr->checksum2.sumint += v;
*w++ = v;
}
}
@@ -610,7 +611,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
//mnstr_printf(cntxt->fdout,"decompress bits %d mask %o
val %d\n",bits,m,val);
for(i = 0; i < lim; i++){
v= decompress(base,i,bits);
- hdr->checksum.sumlng += v;
+ hdr->checksum2.sumlng += v;
*w++ = v;
}
}
diff --git a/monetdb5/modules/mosaic/mosaic_runlength.c
b/monetdb5/modules/mosaic/mosaic_runlength.c
--- a/monetdb5/modules/mosaic/mosaic_runlength.c
+++ b/monetdb5/modules/mosaic/mosaic_runlength.c
@@ -249,19 +249,7 @@ MOScompress_runlength(Client cntxt, MOSt
#ifdef HAVE_HGE
case TYPE_hge: RLEcompress(hge); break;
#endif
- case TYPE_int:
- { int *v = ((int*) task->src)+task->start, val = *v;
- int *dst = (int*) task->dst;
- BUN limit = task->stop - task->start > MOSlimit() ?
MOSlimit(): task->stop - task->start;
- *dst = val;
- for(v++,i = 1; i<limit; i++, v++)
- if ( *v != val)
- break;
- hdr->checksum.sumint += (int)(i * val);
- MOSsetCnt(blk,i);
- task->dst += sizeof(int);
- }
- break;
+ case TYPE_int: RLEcompress(int); break;
case TYPE_str:
// we only have to look at the index width, not the values
switch(task->bsrc->twidth){
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list