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

Reply via email to