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

Reply via email to