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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list