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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list