Changeset: 1e30c97289d7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1e30c97289d7
Modified Files:
monetdb5/modules/mal/mosaic.c
monetdb5/modules/mal/mosaic_delta.c
monetdb5/modules/mal/mosaic_dictionary.c
monetdb5/modules/mal/mosaic_frame.c
monetdb5/modules/mal/mosaic_linear.c
monetdb5/modules/mal/mosaic_literal.c
monetdb5/modules/mal/mosaic_prefix.c
monetdb5/modules/mal/mosaic_runlength.c
Branch: mosaic
Log Message:
Fixing offset and types
= use the ATOMbasetype where appropriate
- fix frame compression
diffs (truncated from 628 to 300 lines):
diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c
--- a/monetdb5/modules/mal/mosaic.c
+++ b/monetdb5/modules/mal/mosaic.c
@@ -296,7 +296,7 @@ MOScompressInternal(Client cntxt, bat *r
if ((bcompress = BATdescriptor(*bid)) == NULL)
throw(MAL, "mosaic.compress", INTERNAL_BAT_ACCESS);
- switch(ATOMstorage(bcompress->ttype)){
+ switch(ATOMbasetype(bcompress->ttype)){
case TYPE_bit:
case TYPE_bte:
case TYPE_sht:
@@ -761,7 +761,7 @@ MOSdecompressInternal(Client cntxt, bat
BBPkeepref( *ret = bsrc->batCacheid);
}
error = 0;
- switch( ATOMstorage(task->type)){
+ switch( ATOMbasetype(task->type)){
case TYPE_bte:
error = task->hdr->checksum.sumbte !=
task->hdr->checksum2.sumbte;
break;
diff --git a/monetdb5/modules/mal/mosaic_delta.c
b/monetdb5/modules/mal/mosaic_delta.c
--- a/monetdb5/modules/mal/mosaic_delta.c
+++ b/monetdb5/modules/mal/mosaic_delta.c
@@ -132,7 +132,7 @@ MOSestimate_delta(Client cntxt, MOStask
flt factor = 1.0;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: case TYPE_bit: no compression achievable
case TYPE_sht: Estimate_delta(sht, (delta < -127 || delta >127));
break;
case TYPE_oid: Estimate_delta(sht, (delta > 255)); break;
@@ -198,7 +198,7 @@ MOScompress_delta(Client cntxt, MOStask
(void) cntxt;
MOSsetTag(blk,MOSAIC_DELTA);
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: case TYPE_bit: no compression achievable
case TYPE_sht: DELTAcompress(sht,(delta < -127 || delta >127)); break;
case TYPE_int: DELTAcompress(int,(delta < -127 || delta >127)); break;
@@ -262,7 +262,7 @@ MOSdecompress_delta(Client cntxt, MOStas
BUN i;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: case TYPE_bit: no compression achievable
case TYPE_sht: DELTAdecompress(sht); break;
case TYPE_int: DELTAdecompress(int); break;
diff --git a/monetdb5/modules/mal/mosaic_dictionary.c
b/monetdb5/modules/mal/mosaic_dictionary.c
--- a/monetdb5/modules/mal/mosaic_dictionary.c
+++ b/monetdb5/modules/mal/mosaic_dictionary.c
@@ -51,7 +51,7 @@ MOSdump_dictionaryInternal(char *buf, si
{
void *val = (void*)task->hdr->dict;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht:
snprintf(buf,len,"%hd", ((sht*) val)[i]); break;
case TYPE_int:
@@ -202,7 +202,7 @@ MOScreatedictionary(Client cntxt, MOStas
for(j=0;j<256;j++)
cnt[j]=0;
hdr->dictsize = 0;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: makeDict(sht); break;
case TYPE_lng: makeDict(lng); break;
case TYPE_oid: makeDict(oid); break;
@@ -266,7 +266,7 @@ MOSestimate_dictionary(Client cntxt, MOS
MosaicHdr hdr = task->hdr;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: estimateDict(sht); break;
case TYPE_lng: estimateDict(lng); break;
@@ -345,7 +345,7 @@ MOScompress_dictionary(Client cntxt, MOS
MOSsetTag(blk,MOSAIC_DICT);
MOSsetCnt(blk,0);
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: DICTcompress(sht); break;
case TYPE_int: DICTcompress(int); break;
@@ -428,7 +428,7 @@ MOSdecompress_dictionary(Client cntxt, M
unsigned long *base;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: DICTdecompress(sht); break;
case TYPE_lng: DICTdecompress(lng); break;
@@ -916,7 +916,7 @@ MOSleftfetchjoin_dictionary(Client cntxt
first = task->start;
last = first + MOSgetCnt(task->blk);
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: leftfetchjoin_dictionary(sht); break;
case TYPE_lng: leftfetchjoin_dictionary(lng); break;
case TYPE_oid: leftfetchjoin_dictionary(oid); break;
@@ -974,7 +974,7 @@ MOSjoin_dictionary(Client cntxt, MOStas
(void) cntxt;
// set the oid range covered and advance scan range
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: join_dictionary(sht); break;
case TYPE_lng: join_dictionary(lng); break;
case TYPE_oid: join_dictionary(oid); break;
diff --git a/monetdb5/modules/mal/mosaic_frame.c
b/monetdb5/modules/mal/mosaic_frame.c
--- a/monetdb5/modules/mal/mosaic_frame.c
+++ b/monetdb5/modules/mal/mosaic_frame.c
@@ -65,7 +65,7 @@ static void
MOSdump_frameInternal(char *buf, size_t len, MOStask task, int i)
{
void * val = (void*) task->hdr->frame;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht:
snprintf(buf,len,"%hd", ((sht*) val)[i]); break;
case TYPE_int:
@@ -214,10 +214,9 @@ MOScreateframeDictionary(Client cntxt, M
lng cnt[256];
(void) cntxt;
- for(j=0;j<256;j++)
- cnt[j]=0;
+ memset((char*)cnt,0, sizeof(lng) * 256);
hdr->framesize = 0;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: makeFrame(sht); break;
case TYPE_lng: makeFrame(lng); break;
case TYPE_oid: makeFrame(oid); break;
@@ -269,8 +268,8 @@ MOScreateframeDictionary(Client cntxt, M
}
}
}
+#ifdef _DEBUG_MOSAIC_
MOSdump_frame(cntxt, task);
-#ifdef _DEBUG_MOSAIC_
#endif
}
@@ -283,7 +282,7 @@ MOSestimate_frame(Client cntxt, MOStask
MosaicHdr hdr = task->hdr;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: estimateFrame(sht); break;
case TYPE_lng: estimateFrame(lng); break;
@@ -334,11 +333,11 @@ MOSestimate_frame(Client cntxt, MOStask
task->dst = ((char*) task->blk)+ MosaicBlkSize;\
*(TPE*) task->dst = frame;\
task->dst += sizeof(TPE);\
- base = (unsigned long*) (((char*) task->blk) +
wordaligned(sizeof(TPE),lng));\
+ base = (unsigned long*) (((char*) task->blk) + MosaicBlkSize +
wordaligned(sizeof(TPE),lng));\
base[0]=0;\
for(i =0; i<limit; i++, val++){\
- hdr->checksum.sum##TPE += *val;\
delta = *val - frame;\
+ hdr->checksum.sum##TPE += delta;\
MOSfind(j,delta,0,hdr->framesize);\
if(j == hdr->framesize || dict[j] != delta) \
break;\
@@ -364,10 +363,10 @@ MOScompress_frame(Client cntxt, MOStask
MOSsetTag(blk,MOSAIC_FRAME);
MOSsetCnt(blk,0);
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: FRAMEcompress(sht); break;
- case TYPE_lng: FRAMEcompress(lng); break;
+ case TYPE_int: FRAMEcompress(int); break;
case TYPE_oid: FRAMEcompress(oid); break;
case TYPE_wrd: FRAMEcompress(wrd); break;
case TYPE_flt: FRAMEcompress(flt); break;
@@ -375,22 +374,21 @@ MOScompress_frame(Client cntxt, MOStask
#ifdef HAVE_HGE
case TYPE_hge: FRAMEcompress(hge); break;
#endif
- case TYPE_int:
- { int *val = ((int*)task->src) + task->start, frame =
*val, delta;
- int *dict = (int*)hdr->frame;
+ case TYPE_lng:
+ { lng *val = ((lng*)task->src) + task->start, frame =
*val, delta;
+ lng *dict = (lng*)hdr->frame;
BUN limit = task->stop - task->start > MOSlimit()?
MOSlimit(): task->stop - task->start;
task->dst = ((char*) task->blk)+ MosaicBlkSize;
- *(int*) task->dst = frame; // keep the frame
reference value
- task->dst += wordaligned(sizeof(int),lng);
-
- base = (unsigned long*) (((char*) task->blk) +
sizeof(int)); // start of bit vector
+ *(lng*) task->dst = frame; // keep the frame
reference value
+ task->dst += sizeof(lng);
+ base = (unsigned long*) (((char*) task->blk) +
MosaicBlkSize + wordaligned(sizeof(lng),lng)); // start of bit vector
base[0]=0;
for(i =0; i<limit; i++, val++){
- hdr->checksum.sumint += *val;
delta = *val - frame;
+ hdr->checksum.sumlng += delta;
MOSfind(j,delta,0,hdr->framesize);
- //mnstr_printf(cntxt->fdout,"compress
["BUNFMT"] val %d index %d framebits %d\n",i, *val,j,hdr->framebits);
+ //mnstr_printf(cntxt->fdout,"compress
["BUNFMT"] val "LLFMT" index %d framebits %d\n",i, *val,j,hdr->framebits);
if( j == hdr->framesize || dict[j] != delta )
break;
else {
@@ -433,7 +431,7 @@ if ( lshift >= hdr->framebits){\
{ TPE *dict =(TPE*)((char*)hdr->frame), frame;\
BUN lim = MOSgetCnt(blk);\
frame = *(TPE*)(((char*)blk) + MosaicBlkSize);\
- base = (unsigned long*) (((char*) blk) +
wordaligned(sizeof(TPE),lng));\
+ base = (unsigned long*) (((char*) blk) + MosaicBlkSize +
wordaligned(sizeof(TPE),lng));\
for(i = 0; i < lim; i++){\
framedecompress(i);\
((TPE*)task->src)[i] = frame + dict[j];\
@@ -448,15 +446,16 @@ MOSdecompress_frame(Client cntxt, MOStas
MosaicBlk blk = task->blk;
MosaicHdr hdr = task->hdr;
BUN i;
- unsigned int j,m1,m2;
+ unsigned int j;
+ unsigned int m1, m2;
int cid, lshift, rshift;
unsigned long *base;
(void) cntxt;
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
//case TYPE_bte: CASE_bit: no compression achievable
case TYPE_sht: FRAMEdecompress(sht); break;
- case TYPE_lng: FRAMEdecompress(lng); break;
+ case TYPE_int: FRAMEdecompress(int); break;
case TYPE_oid: FRAMEdecompress(oid); break;
case TYPE_wrd: FRAMEdecompress(wrd); break;
case TYPE_flt: FRAMEdecompress(flt); break;
@@ -464,27 +463,28 @@ MOSdecompress_frame(Client cntxt, MOStas
#ifdef HAVE_HGE
case TYPE_hge: FRAMEdecompress(hge); break;
#endif
- case TYPE_int:
- { int *dict =(int*)((char*)hdr->frame), frame;
+ case TYPE_lng:
+ { lng *dict =(lng*)hdr->frame;
BUN lim = MOSgetCnt(blk);
- frame = *(int*)(((char*)blk) + MosaicBlkSize);
- base = (unsigned long*) (((char*) blk) +
wordaligned(sizeof(int),lng));
+ lng frame = *(lng*)(((char*)blk) + MosaicBlkSize);
+ base = (unsigned long*) (((char*) blk) + MosaicBlkSize
+ sizeof(lng));
for(i = 0; i < lim; i++){
+ //mnstr_printf(cntxt->fdout,"decompress
["BUNFMT"] val "LLFMT" framebits %d\n",i, frame,hdr->framebits);
cid = (i * hdr->framebits)/64;
lshift= 63 -((i * hdr->framebits) % 64) ;
if ( lshift >= hdr->framebits){
j = (base[cid]>>
(lshift-hdr->framebits)) & ((unsigned long)hdr->mask);
- //mnstr_printf(cntxt->fdout,"[%d]
lshift %d m %d\n", cid, lshift,m1);
+ //mnstr_printf(cntxt->fdout,"decompress
[%d] lshift %d m %d\n", cid, lshift,j);
}else{
rshift= 63 - ((i+1) * hdr->framebits)
% 64;
m1 = (base[cid] & ( ((unsigned
long)hdr->mask) >> (hdr->framebits-lshift)));
m2 = (base[cid+1] >>rshift);
j= ((m1 <<(hdr->framebits-lshift)) |
m2) & 0377;\
- //mnstr_printf(cntxt->fdout,"[%d] shift
%d %d cid %lo %lo val %o %o\n", cid, lshift, rshift,base[cid],base[cid+1], m1,
m2);
+ //mnstr_printf(cntxt->fdout,"decompress
[%d] shift %d %d val "LLFMT"cid %lo %lo idx %d\n", cid, lshift,
rshift,frame,base[cid],base[cid+1], j);
}
hdr->checksum2.sumint += dict[j];
- ((int*)task->src)[i] = frame + dict[j];
+ ((lng*)task->src)[i] = frame + dict[j];
}
task->src += i * sizeof(int);
}
@@ -947,7 +947,7 @@ MOSleftfetchjoin_frame(Client cntxt, MO
first = task->start;
last = first + MOSgetCnt(task->blk);
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: leftfetchjoin_frame(sht); break;
case TYPE_lng: leftfetchjoin_frame(lng); break;
case TYPE_oid: leftfetchjoin_frame(oid); break;
@@ -1006,7 +1006,7 @@ MOSjoin_frame(Client cntxt, MOStask tas
(void) cntxt;
// set the oid range covered and advance scan range
- switch(ATOMstorage(task->type)){
+ switch(ATOMbasetype(task->type)){
case TYPE_sht: join_frame(sht); break;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list