Changeset: 09a0f91b8584 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=09a0f91b8584 Modified Files: monetdb5/modules/mosaic/mosaic_dictionary.c monetdb5/modules/mosaic/mosaic_linear.c Branch: mosaic Log Message:
Fix checksum calculation Only add it when you actual use the value. diffs (109 lines): 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 @@ -243,8 +243,10 @@ MOScreatedictionary(Client cntxt, MOStas #ifdef HAVE_HGE case TYPE_hge: makeDict(hge); break; #endif +#ifdef _DEBUG_MOSAIC_ default: mnstr_printf(cntxt->fdout,"#does not support dictionary type %d\n",ATOMbasetype(task->type)); +#endif } #ifdef _DEBUG_MOSAIC_ MOSdump_dictionary(cntxt, task); @@ -297,8 +299,10 @@ MOSestimate_dictionary(Client cntxt, MOS if(i) factor = (flt) ((lng)i * sizeof(lng)) / wordaligned( MosaicBlkSize + i,lng); } break; +#ifdef _DEBUG_MOSAIC_ default: mnstr_printf(cntxt->fdout,"#does not support dictionary type %d\n",ATOMbasetype(task->type)); +#endif } #ifdef _DEBUG_MOSAIC_ mnstr_printf(cntxt->fdout,"#estimate dict "BUNFMT" elm %4.2f factor\n", i, factor); @@ -316,11 +320,11 @@ MOSestimate_dictionary(Client cntxt, MOS BitVector base = (BitVector) MOScodevector(task);\ BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): task->stop - task->start;\ for(i =0; i<limit; i++, val++){\ - hdr->checksum.sum##TPE += *val;\ MOSfind(j,task->hdr->dict.val##TPE,*val,0,hdr->dictsize);\ if(j == hdr->dictsize || task->hdr->dict.val##TPE[j] != *val) \ break;\ else {\ + hdr->checksum.sum##TPE += *val;\ hdr->dictfreq[j]++;\ MOSincCnt(blk,1);\ setBitVector(base,i,hdr->bits,(unsigned int)j);\ @@ -348,24 +352,7 @@ MOScompress_dictionary(Client cntxt, MOS //case TYPE_bte: CASE_bit: no compression achievable case TYPE_sht: DICTcompress(sht); break; case TYPE_int: DICTcompress(int); break; - case TYPE_lng: //DICTcompress(lng); break; -{ lng *val = ((lng*)task->src) + task->start; - BitVector base = (BitVector) MOScodevector(task);\ - BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): task->stop - task->start; - for(i =0; i<limit; i++, val++){ - hdr->checksum.sumlng += *val; - MOSfind(j,task->hdr->dict.vallng,*val,0,hdr->dictsize); - if(j == hdr->dictsize || task->hdr->dict.vallng[j] != *val) - break; - else { - hdr->dictfreq[j]++; - MOSincCnt(blk,1); - setBitVector(base,i,hdr->bits,(unsigned int)j); - } - } - assert(i); -} -break; + case TYPE_lng: DICTcompress(lng); break; case TYPE_oid: DICTcompress(oid); break; case TYPE_flt: DICTcompress(flt); break; case TYPE_dbl: DICTcompress(dbl); break; 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 @@ -239,9 +239,9 @@ MOSestimate_linear(Client cntxt, MOStask *(TYPE*) linear_base(blk) = val;\ *(TYPE*) linear_step(task,blk) = step;\ for(i=1; i<limit; i++, val = *v++){\ - hdr->checksum.sum##TYPE += val;\ if ( *v - val != step)\ break;\ + hdr->checksum.sum##TYPE += val;\ } MOSsetCnt(blk, i);\ task->dst = ((char*) blk)+ wordaligned(MosaicBlkSize + 2 * sizeof(TYPE),MosaicBlkRec);\ } @@ -261,6 +261,7 @@ MOScompress_linear(Client cntxt, MOStask case TYPE_bte: LINEARcompress(bte); break; case TYPE_bit: LINEARcompress(bit); break; case TYPE_sht: LINEARcompress(sht); break; + case TYPE_int: LINEARcompress(int); break; case TYPE_oid: LINEARcompress(oid); break; case TYPE_lng: LINEARcompress(lng); break; case TYPE_flt: LINEARcompress(flt); break; @@ -268,22 +269,6 @@ MOScompress_linear(Client cntxt, MOStask #ifdef HAVE_HGE case TYPE_hge: LINEARcompress(hge); break; #endif - case TYPE_int: - { int *v = ((int*) task->src) + task->start, val = *v++;\ - int step = *v - val;\ - BUN limit = task->stop - task->start >= task->start + MOSlimit()? MOSlimit():task->stop; - *(int*) linear_base(blk) = val; - *(int*) linear_step(task,blk) = step; - for(i=1; i<limit; i++, val = *v++){ - hdr->checksum.sumint += val; - if ( *v-val != step) - break; - } - MOSsetCnt(blk,i); - //task->dst = ((char*) blk)+ MosaicBlkSize + 2 * sizeof(int); - task->dst = ((char*) blk)+ wordaligned(MosaicBlkSize + 2 * sizeof(int),MosaicBlkRec);\ - } - 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