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