Changeset: 1a37ac417c72 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1a37ac417c72
Modified Files:
        monetdb5/modules/mal/Tests/xidlist.stable.out
        monetdb5/modules/mal/xid.c
Branch: xid
Log Message:

xid.c: fixed XIDSET: can only work for strictly increasing sets (sequences),
as otherwise we loose order information for reconstruction (decompression)


diffs (87 lines):

diff --git a/monetdb5/modules/mal/Tests/xidlist.stable.out 
b/monetdb5/modules/mal/Tests/xidlist.stable.out
--- a/monetdb5/modules/mal/Tests/xidlist.stable.out
+++ b/monetdb5/modules/mal/Tests/xidlist.stable.out
@@ -152,8 +152,8 @@ end main;
 [ 77@0,          1270@0  ]
 [ 78@0,          1280@0  ]
 [ 79@0,          1290@0  ]
-#xid, 83, tail compress, 80,26,  clk 136 ms 2 usec
-column first 27, size 27, 
+#xid, 83, tail compress, 80,68,  clk 3 usec
+column first 69, size 69, 
 r:0 3
 p:5
 p:7
@@ -165,6 +165,26 @@ p:50
 r:49 50
 p:50
 p:48
+p:1003
+p:1002
+p:1001
+p:1000
+p:95
+p:99
+p:96
+p:98
+p:97
+p:94
+p:90
+p:93
+r:91 92
+p:1140
+p:1130
+p:1120
+p:1110
+p:1100
+p:1250
+s:[1250] 020010004002000
 r:0 3
 p:5
 p:7
@@ -176,7 +196,27 @@ p:50
 r:49 50
 p:50
 p:48
-#xid, 83, decompress, 27, 80, clk 136 1 usec
+p:1003
+p:1002
+p:1001
+p:1000
+p:95
+p:99
+p:96
+p:98
+p:97
+p:94
+p:90
+p:93
+r:91 92
+p:1140
+p:1130
+p:1120
+p:1110
+p:1100
+p:1250
+s:[1250] 020010004002000
+#xid, 83, decompress, 69, 80, clk 2 usec
 #-----------------#
 # h    t         # name
 # void oid       # type
diff --git a/monetdb5/modules/mal/xid.c b/monetdb5/modules/mal/xid.c
--- a/monetdb5/modules/mal/xid.c
+++ b/monetdb5/modules/mal/xid.c
@@ -64,9 +64,10 @@ XIDencode(BUN *rtrn, XIDcolumn col, oid 
                        //mnstr_printf(GDKout,"xidpoint " BUNFMT " " XIDFMT 
"\n",i,v);
                        break;
                case XIDSET:
-                       /* watch out for duplicates */
-                       if ( v > (xid) col[i-1].value && v < (xid) 
col[i-1].value + XID_VAL_BITS &&
-                               (col[i].value &  ((xid)1)<< (v - 
col[i-1].value)) == 0){
+                       /* works only for strictly increasing sets (sequences);
+                        * otherwise, we loose order information
+                        */
+                       if ( v > prev && v < (xid) col[i-1].value + 
XID_VAL_BITS ) {
                                col[i].value |=  ( ((xid)1)<< (v - 
col[i-1].value));
                                scnt++;
                                prev= v;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to