Changeset: 050594303a14 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=050594303a14
Modified Files:
        monetdb5/modules/mal/Tests/mosaic_rle.mal
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic.h
        monetdb5/modules/mal/mosaic_delta.c
        monetdb5/modules/mal/mosaic_dict.c
        monetdb5/modules/mal/mosaic_linear.c
        monetdb5/modules/mal/mosaic_none.c
        monetdb5/modules/mal/mosaic_rle.c
        monetdb5/modules/mal/mosaic_zone.c
        sql/test/mosaic/Tests/All
        sql/test/mosaic/Tests/compression.sql
        sql/test/mosaic/Tests/compressionRLE.sql
        sql/test/mosaic/Tests/compressionSUM.sql
Branch: mosaic
Log Message:

Fixed type alignment and rle errors
SQL tests should run with sequential-pipe for the time being


diffs (truncated from 496 to 300 lines):

diff --git a/monetdb5/modules/mal/Tests/mosaic_rle.mal 
b/monetdb5/modules/mal/Tests/mosaic_rle.mal
--- a/monetdb5/modules/mal/Tests/mosaic_rle.mal
+++ b/monetdb5/modules/mal/Tests/mosaic_rle.mal
@@ -62,3 +62,102 @@ x:= mosaic.compress(b,"rle");
 #mosaic.dump(x);
 z:= mosaic.decompress(x);
 io.print(z);
+# OID list compressions
+
+
+o := 19531025:int;
+
+f:= bat.new(:oid,:flt);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.314);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.316);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+bat.append(f,0.317);
+
+
+io.print(f);
+xf:= mosaic.compress(f,"rle");
+zf:= mosaic.decompress(xf);
+io.print(zf);
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
@@ -171,7 +171,7 @@ MOScompressInternal(Client cntxt, int *r
        lng percentage=0, perc;
        int filter[MOSAIC_METHODS];
        
-       if( properties && !strstr(properties,"compress"))
+       if( properties && !strstr(properties,"compressed"))
                for( i = 0; i< MOSAIC_METHODS; i++)
                        filter[i]= strstr(properties,filtername[i]) != 0;
        else
diff --git a/monetdb5/modules/mal/mosaic.h b/monetdb5/modules/mal/mosaic.h
--- a/monetdb5/modules/mal/mosaic.h
+++ b/monetdb5/modules/mal/mosaic.h
@@ -78,11 +78,14 @@ typedef lng *MosaicBlk;
 #define MOSzone (((lng)MOSAIC_ZONE) <<56)
 #define MOSeol (((lng)MOSAIC_EOL) <<56)
 
-#define wordaligned(SZ) \
-        ((SZ) +  ((SZ) % sizeof(int)? sizeof(int) - ((SZ)%sizeof(int)) : 0))
+/* Memory word alignement is type and platform dependent.
+ * We use an encoding that fits the column type requirements
+ */
+#define wordaligned(SZ,TYPE) \
+        ((SZ) +  ((SZ) % sizeof(int)? sizeof(int) - ((SZ)%sizeof(TYPE)) : 0))
 
-#define MosaicHdrSize  wordaligned(sizeof(struct MOSAICHEADER))
-#define MosaicBlkSize  wordaligned(sizeof(lng))
+#define MosaicHdrSize  wordaligned(sizeof(struct MOSAICHEADER),lng)
+#define MosaicBlkSize  wordaligned(sizeof(lng),lng)
 
 
 typedef struct MOSTASK{
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
@@ -38,18 +38,18 @@ MOSadvance_delta(MOStask task)
 {
        MosaicBlk blk = task->blk;
        switch(task->type){
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht) + MOScnt(blk)-1)); break ;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int) + MOScnt(blk)-1)); break ;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid) + MOScnt(blk)-1)); break ;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd) + MOScnt(blk)-1)); break ;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng) + MOScnt(blk)-1)); break ;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht) + MOScnt(blk)-1,sht)); break ;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int) + MOScnt(blk)-1,int)); break ;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid) + MOScnt(blk)-1,oid)); break ;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd) + MOScnt(blk)-1,wrd)); break ;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng) + MOScnt(blk)-1,lng)); break ;
        default:
                if( task->type == TYPE_timestamp)
-                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(timestamp) + MOScnt(blk)-1)); 
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(timestamp) + MOScnt(blk)-1,timestamp)); 
                if( task->type == TYPE_date)
-                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(date) + MOScnt(blk)-1)); 
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(date) + MOScnt(blk)-1,date)); 
                if( task->type == TYPE_daytime)
-                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(daytime) + MOScnt(blk)-1)); 
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(daytime) + MOScnt(blk)-1,daytime)); 
        }
 }
 
diff --git a/monetdb5/modules/mal/mosaic_dict.c 
b/monetdb5/modules/mal/mosaic_dict.c
--- a/monetdb5/modules/mal/mosaic_dict.c
+++ b/monetdb5/modules/mal/mosaic_dict.c
@@ -62,6 +62,8 @@ MOSdump_dict(Client cntxt, MOStask task)
        default:
                if( task->type == TYPE_date){
                }
+               if( task->type == TYPE_daytime){
+               }
                if( task->type == TYPE_timestamp){
                }
        }
@@ -72,16 +74,18 @@ void
 MOSadvance_dict(MOStask task)
 {
        switch(task->type){
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(sht)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); break;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(int)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); break;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(oid)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); break;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(lng)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); break;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(wrd)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); break;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(sht)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),sht)); break;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(int)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),int)); break;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(oid)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),oid)); break;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(lng)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),lng)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + dictsize * sizeof(wrd)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),wrd)); break;
        default:
                if( task->type == TYPE_timestamp)
-                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(timestamp)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); 
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(timestamp)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),timestamp)); 
                if( task->type == TYPE_date)
-                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk))); 
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),date)); 
+               if( task->type == TYPE_daytime)
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOScnt(task->blk),daytime)); 
        }
 }
 
@@ -163,8 +167,10 @@ MOSestimate_dict(Client cntxt, MOStask t
                                break;\
                        }\
                if ( j == *size){\
-                       if ( *size == dictsize)\
+                       if ( *size == dictsize){\
+                               task->dst += wordaligned(MOScnt(blk) %2,TPE);\
                                break;\
+                       }\
                        dict[j] = *val;\
                        *size = *size+1;\
                        *task->dst++ = (char) j;\
@@ -206,7 +212,7 @@ MOScompress_dict(Client cntxt, MOStask t
                                if ( j == *size){
                                        if ( *size == dictsize){
                                                // align on word boundary
-                                               task->dst += 
wordaligned(MOScnt(blk) %2);
+                                               task->dst += 
wordaligned(MOScnt(blk) %2,lng);
                                                break;
                                        }
                                        dict[j] = *val;
diff --git a/monetdb5/modules/mal/mosaic_linear.c 
b/monetdb5/modules/mal/mosaic_linear.c
--- a/monetdb5/modules/mal/mosaic_linear.c
+++ b/monetdb5/modules/mal/mosaic_linear.c
@@ -81,22 +81,22 @@ void
 MOSadvance_linear(MOStask task)
 {
        switch(task->type){
-       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bte))); break;
-       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bit))); break;
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(sht))); break;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(int))); break;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(oid))); break;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(lng))); break;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(wrd))); break;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(flt))); break;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(dbl))); break;
+       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bte),bte)); break;
+       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bit),bit)); break;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(sht),sht)); break;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(int),int)); break;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(oid),oid)); break;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(lng),lng)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(wrd),wrd)); break;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(flt),flt)); break;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(dbl),dbl)); break;
        default:
                if( task->type == TYPE_daytime)
-                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(daytime)) ); 
+                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(daytime), daytime) ); 
                if( task->type == TYPE_date)
-                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(date)) ); 
+                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(date),date) ); 
                if( task->type == TYPE_timestamp)
-                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(lng)) ); 
+                       task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(timestamp),timestamp) ); 
        }
 }
 
diff --git a/monetdb5/modules/mal/mosaic_none.c 
b/monetdb5/modules/mal/mosaic_none.c
--- a/monetdb5/modules/mal/mosaic_none.c
+++ b/monetdb5/modules/mal/mosaic_none.c
@@ -38,22 +38,22 @@ MOSadvance_none(MOStask task)
 {
        MosaicBlk blk = task->blk;
        switch(task->type){
-       case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte)* MOScnt(blk))); break ;
-       case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bit)* MOScnt(blk))); break ;
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht)* MOScnt(blk))); break ;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int)* MOScnt(blk))); break ;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid)* MOScnt(blk))); break ;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng)* MOScnt(blk))); break ;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd)* MOScnt(blk))); break ;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(flt)* MOScnt(blk))); break ;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(dbl)* MOScnt(blk))); break;
+       case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte)* MOScnt(blk),bte)); break ;
+       case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bit)* MOScnt(blk),bit)); break ;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht)* MOScnt(blk),sht)); break ;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int)* MOScnt(blk),int)); break ;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid)* MOScnt(blk),oid)); break ;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng)* MOScnt(blk),lng)); break ;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd)* MOScnt(blk),wrd)); break ;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(flt)* MOScnt(blk),flt)); break ;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(dbl)* MOScnt(blk),dbl)); break;
        default:
                if( task->type == TYPE_date)
-                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(date)* MOScnt(blk))); 
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(date)* MOScnt(blk),date)); 
                if( task->type == TYPE_daytime)
-                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(daytime)* MOScnt(blk))); 
+                       task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(daytime)* MOScnt(blk),daytime)); 
                if( task->type == TYPE_timestamp)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to