Changeset: 8537696858ac for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8537696858ac Modified Files: monetdb5/modules/mosaic/mosaic_raw.c Branch: mosaic Log Message:
Clean up raw 'compression' code. diffs (truncated from 472 to 300 lines): diff --git a/monetdb5/modules/mosaic/mosaic_raw.c b/monetdb5/modules/mosaic/mosaic_raw.c --- a/monetdb5/modules/mosaic/mosaic_raw.c +++ b/monetdb5/modules/mosaic/mosaic_raw.c @@ -17,9 +17,9 @@ #include "mosaic_private.h" bool MOStypes_raw(BAT* b) { - switch(ATOMbasetype(getBatType(b->ttype))){ + switch(b->ttype){ + case TYPE_bit: return true; case TYPE_bte: return true; - case TYPE_bit: return true; case TYPE_sht: return true; case TYPE_int: return true; case TYPE_lng: return true; @@ -29,14 +29,10 @@ bool MOStypes_raw(BAT* b) { #ifdef HAVE_HGE case TYPE_hge: return true; #endif - case TYPE_str: - switch(b->twidth){ - case 1: return true; - case 2: return true; - case 4: return true; - case 8: return true; - } - break; + default: + if (b->ttype == TYPE_date) {return true;} // Will be mapped to int + if (b->ttype == TYPE_daytime) {return true;} // Will be mapped to lng + if (b->ttype == TYPE_timestamp) {return true;} // Will be mapped to lng } return false; @@ -50,24 +46,17 @@ MOSlayout_raw(MOStask task, BAT *btech, input = cnt * ATOMsize(task->type); switch(ATOMbasetype(task->type)){ - case TYPE_bte: output = wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte); break ; - case TYPE_bit: output = wordaligned( MosaicBlkSize + sizeof(bit)* MOSgetCnt(blk),bit); break ; - case TYPE_sht: output = wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht); break ; - case TYPE_int: output = wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int); break ; - case TYPE_oid: output = wordaligned( MosaicBlkSize + sizeof(oid)* MOSgetCnt(blk),oid); break ; - case TYPE_lng: output = wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng); break ; + case TYPE_bit: output = wordaligned( MosaicBlkSize + sizeof(bit)* MOSgetCnt(blk),bit); break; + case TYPE_bte: output = wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte); break; + case TYPE_sht: output = wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht); break; + case TYPE_int: output = wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int); break; + case TYPE_oid: output = wordaligned( MosaicBlkSize + sizeof(oid)* MOSgetCnt(blk),oid); break; + case TYPE_lng: output = wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng); break; + case TYPE_flt: output = wordaligned( MosaicBlkSize + sizeof(flt)* MOSgetCnt(blk),flt); break; + case TYPE_dbl: output = wordaligned( MosaicBlkSize + sizeof(dbl)* MOSgetCnt(blk),dbl); break; #ifdef HAVE_HGE - case TYPE_hge: output = wordaligned( MosaicBlkSize + sizeof(hge)* MOSgetCnt(blk),hge); break ; + case TYPE_hge: output = wordaligned( MosaicBlkSize + sizeof(hge)* MOSgetCnt(blk),hge); break; #endif - case TYPE_flt: output = wordaligned( MosaicBlkSize + sizeof(flt)* MOSgetCnt(blk),flt); break ; - case TYPE_dbl: output = wordaligned( MosaicBlkSize + sizeof(dbl)* MOSgetCnt(blk),dbl); break; - case TYPE_str: - switch(task->bsrc->twidth){ - case 1: output = wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte); break ; - case 2: output = wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht); break ; - case 4: output = wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int); break ; - case 8: output = wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng); break ; - } } if( BUNappend(btech, "raw blk", false) != GDK_SUCCEED || BUNappend(bcount, &cnt, false) != GDK_SUCCEED || @@ -84,24 +73,17 @@ MOSadvance_raw(MOStask task) task->start += MOSgetCnt(blk); switch(ATOMbasetype(task->type)){ - case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte)); break ; - case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(bit)* MOSgetCnt(blk),bit)); break ; - case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht)); break ; - case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int)); break ; - case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(oid)* MOSgetCnt(blk),oid)); break ; - case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng)); break ; + case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(bit)* MOSgetCnt(blk),bit)); break; + case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte)); break; + case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht)); break; + case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int)); break; + case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(oid)* MOSgetCnt(blk),oid)); break; + case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng)); break; + case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(flt)* MOSgetCnt(blk),flt)); break; + case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(dbl)* MOSgetCnt(blk),dbl)); break; #ifdef HAVE_HGE - case TYPE_hge: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(hge)* MOSgetCnt(blk),hge)); break ; + case TYPE_hge: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(hge)* MOSgetCnt(blk),hge)); break; #endif - case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(flt)* MOSgetCnt(blk),flt)); break ; - case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(dbl)* MOSgetCnt(blk),dbl)); break; - case TYPE_str: - switch(task->bsrc->twidth){ - case 1: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte)); break ; - case 2: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht)); break ; - case 4: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int)); break ; - case 8: task->blk = (MosaicBlk)( ((char*) task->blk) + wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng)); break ; - } } } @@ -133,9 +115,10 @@ MOScompress_raw(MOStask task) MOSsetTag(blk,MOSAIC_RAW); switch(ATOMbasetype(task->type)){ - case TYPE_bte: RAWcompress(bte); break ; - case TYPE_bit: RAWcompress(bit); break ; + case TYPE_bit: RAWcompress(bit); break; + case TYPE_bte: RAWcompress(bte); break; case TYPE_sht: RAWcompress(sht); break; + case TYPE_int: RAWcompress(int); break; case TYPE_oid: RAWcompress(oid); break; case TYPE_lng: RAWcompress(lng); break; case TYPE_flt: RAWcompress(flt); break; @@ -143,20 +126,6 @@ MOScompress_raw(MOStask task) #ifdef HAVE_HGE case TYPE_hge: RAWcompress(hge); break; #endif - case TYPE_int: - { *(int*) task->dst = ((int*) task->src)[task->start]; - hdr->checksum.sumint += *(int*) task->dst; - task->dst += sizeof(int); - MOSincCnt(blk,1); - } - break; - case TYPE_str: - switch(task->bsrc->twidth){ - case 1: RAWcompress(bte); break ; - case 2: RAWcompress(sht); break ; - case 4: RAWcompress(int); break ; - case 8: RAWcompress(lng); break ; - } } } @@ -180,9 +149,10 @@ MOSdecompress_raw(MOStask task) compressed = ((char*)blk) + MosaicBlkSize; switch(ATOMbasetype(task->type)){ - case TYPE_bte: RAWdecompress(bte); break ; - case TYPE_bit: RAWdecompress(bit); break ; + case TYPE_bit: RAWdecompress(bit); break; + case TYPE_bte: RAWdecompress(bte); break; case TYPE_sht: RAWdecompress(sht); break; + case TYPE_int: RAWdecompress(int); break; case TYPE_oid: RAWdecompress(oid); break; case TYPE_lng: RAWdecompress(lng); break; case TYPE_flt: RAWdecompress(flt); break; @@ -190,22 +160,6 @@ MOSdecompress_raw(MOStask task) #ifdef HAVE_HGE case TYPE_hge: RAWdecompress(hge); break; #endif - case TYPE_int: - { BUN lim = MOSgetCnt(blk); - for(i = 0; i < lim; i++) { - ((int*)task->src)[i] = ((int*)compressed)[i]; - hdr->checksum2.sumint += ((int*)compressed)[i]; \ - } - task->src += i * sizeof(int); - } - break; - case TYPE_str: - switch(task->bsrc->twidth){ - case 1: RAWdecompress(bte); break ; - case 2: RAWdecompress(sht); break ; - case 4: RAWdecompress(int); break ; - case 8: RAWdecompress(lng); break ; - } } } @@ -294,10 +248,11 @@ MOSselect_raw( MOStask task, void *low, } o = task->lb; - switch(task->type){ + switch(ATOMbasetype(task->type)){ case TYPE_bit: select_raw(bit); break; case TYPE_bte: select_raw(bte); break; case TYPE_sht: select_raw(sht); break; + case TYPE_int: select_raw(int); break; case TYPE_oid: select_raw(oid); break; case TYPE_lng: select_raw(lng); break; case TYPE_flt: select_raw(flt); break; @@ -305,153 +260,6 @@ MOSselect_raw( MOStask task, void *low, #ifdef HAVE_HGE case TYPE_hge: select_raw(hge); break; #endif - case TYPE_int: - // Expanded MOSselect_raw for debugging - { int *val= (int*) (((char*) task->blk) + MosaicBlkSize); - - if( !*anti){ - if( *(int*) low == int_nil && *(int*) hgh == int_nil){ - for( ; first < last; first++, val++){ - MOSskipit(); - *o++ = (oid) first; - } - } else - if( *(int*) low == int_nil ){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(int*)val <= * (int*)hgh ) || (!*hi && *(int*)val < *(int*)hgh )); - if (cmp ) - *o++ = (oid) first; - } - } else - if( *(int*) hgh == int_nil ){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*li && *(int*)val >= * (int*)low ) || (!*li && *(int*)val > *(int*)low )); - if (cmp ) - *o++ = (oid) first; - } - } else{ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(int*)val <= * (int*)hgh ) || (!*hi && *(int*)val < *(int*)hgh )) && - ((*li && *(int*)val >= * (int*)low ) || (!*li && *(int*)val > *(int*)low )); - if (cmp ) - *o++ = (oid) first; - } - } - } else { - if( *(int*) low == int_nil && *(int*) hgh == int_nil){ - /* nothing is matching */ - } else - if( *(int*) low == int_nil ){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(int*)val <= * (int*)hgh ) || (!*hi && *(int*)val < *(int*)hgh )); - if ( !cmp ) - *o++ = (oid) first; - } - } else - if( *(int*) hgh == int_nil ){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*li && *(int*)val >= * (int*)low ) || (!*li && *(int*)val > *(int*)low )); - if ( !cmp ) - *o++ = (oid) first; - } - } else{ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(int*)val <= * (int*)hgh ) || (!*hi && *(int*)val < *(int*)hgh )) && - ((*li && *(int*)val >= * (int*)low ) || (!*li && *(int*)val > *(int*)low )); - if ( !cmp ) - *o++ = (oid) first; - } - } - } - } - break; - case TYPE_str: - // beware we should look at the value - switch(task->bsrc->twidth){ - case 1: break ; - case 2: break ; - case 4: break ; - case 8: break ; - } - default: { - if( task->type == TYPE_date) - select_raw(date); - if( task->type == TYPE_daytime) - select_raw(daytime); - - if( task->type == TYPE_timestamp) - { lng *val= (lng*) (((char*) task->blk) + MosaicBlkSize); - int lownil = is_timestamp_nil(*(timestamp*)low); - int hghnil = is_timestamp_nil(*(timestamp*)hgh); - - if( !*anti){ - if( lownil && hghnil){ - for( ; first < last; first++, val++){ - MOSskipit(); - *o++ = (oid) first; - } - } else - if( lownil){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(lng*)val <= * (lng*)hgh ) || (!*hi && *(lng*)val < *(lng*)hgh )); - if (cmp ) - *o++ = (oid) first; - } - } else - if( hghnil){ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*li && *(lng*)val >= * (lng*)low ) || (!*li && *(lng*)val > *(lng*)low )); - if (cmp ) - *o++ = (oid) first; - } - } else{ - for( ; first < last; first++, val++){ - MOSskipit(); - cmp = ((*hi && *(lng*)val <= * (lng*)hgh ) || (!*hi && *(lng*)val < *(lng*)hgh )) && _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list