Changeset: 6e029e1241dd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6e029e1241dd
Modified Files:
monetdb5/modules/mal/bitcandidates.c
monetdb5/modules/mal/bitcandidates.mal
monetdb5/optimizer/opt_bitcandidates.c
Branch: compressedcandidates
Log Message:
although we still operate on the char level, for now BATs have to be of
TYPE_oid to allow :bat[:void] return instances.
diffs (95 lines):
diff --git a/monetdb5/modules/mal/bitcandidates.c
b/monetdb5/modules/mal/bitcandidates.c
--- a/monetdb5/modules/mal/bitcandidates.c
+++ b/monetdb5/modules/mal/bitcandidates.c
@@ -13,7 +13,7 @@
#include "mal_interpreter.h"
#include "sys/param.h"
-#define bits 8 /* using BYTEs to represent the bitvector */
+#define bits 64 /* using BYTEs to represent the bitvector */
str
BCLcompress(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -22,7 +22,7 @@ BCLcompress(Client cntxt, MalBlkPtr mb,
bat *val = getArgReference_bat(stk,pci,1);
BAT *b, *bn;
oid *p,*q, base, first, last, comp;
- bte *o;
+ char *o;
(void) cntxt;
(void) mb;
@@ -39,20 +39,20 @@ BCLcompress(Client cntxt, MalBlkPtr mb,
base = b->tseqbase;
first = *(p);
last = *(q-1);
- comp = (last-first)/bits +1;
+ comp = (last-first)/bits + 2; // at least 2 oids to avoid trivial
properties set by BBPkeepref
fprintf(stderr,"# BLCcompress base "BUNFMT" first "BUNFMT" range "
BUNFMT" count "BUNFMT" vector " BUNFMT"\n", base, first, last, BATcount(b),
comp);
- bn = COLnew(0, TYPE_bte, comp, TRANSIENT);
+ bn = COLnew(0, TYPE_oid, comp, TRANSIENT);
if( bn == NULL)
throw(MAL,"compress",MAL_MALLOC_FAIL);
/* zap the bitvector */
- o = (bte *) Tloc(bn,0);
- memset(o, 0, sizeof(bte) * comp);
+ o = (char *) Tloc(bn,0);
+ memset(o, 0, sizeof(oid) * comp);
for( ; p < q; p++){
- setbit(o, (*p -first));
+ setbit(o, (*p - first));
fprintf(stderr,"# set value " BUNFMT" bit "BUNFMT"\n", *p, (*p
-first));
}
- BATsetcount(bn,(last-first)/ bits + 1);
+ BATsetcount(bn, comp);
bn->hseqbase = b->hseqbase;
bn->tseqbase = first;
bn->tsorted = b->tsorted;
@@ -74,7 +74,7 @@ BCLdecompress(Client cntxt, MalBlkPtr mb
BAT *b, *bn;
oid o = 0, *p;
BUN i, limit;
- bte *vect;
+ char *vect;
(void) cntxt;
(void) mb;
@@ -85,7 +85,7 @@ BCLdecompress(Client cntxt, MalBlkPtr mb
BBPkeepref(*ret = *val);
return MAL_SUCCEED;
}
- vect = (bte*) Tloc(b,0);
+ vect = (char*) Tloc(b,0);
fprintf(stderr,"#decompress %d base "OIDFMT","OIDFMT"\n",
b->batCacheid, b->hseqbase,b->tseqbase);
bn = COLnew(0, TYPE_oid, BATcount(b), TRANSIENT);
diff --git a/monetdb5/modules/mal/bitcandidates.mal
b/monetdb5/modules/mal/bitcandidates.mal
--- a/monetdb5/modules/mal/bitcandidates.mal
+++ b/monetdb5/modules/mal/bitcandidates.mal
@@ -6,10 +6,10 @@
module candidates;
-pattern compress(b:bat[:oid]):bat[:bte]
+pattern compress(b:bat[:oid]):bat[:oid]
address BCLcompress
comment "Compress the bat into a bitvector";
-pattern decompress(b:bat[:bte]):bat[:oid]
+pattern decompress(b:bat[:oid]):bat[:oid]
address BCLdecompress
comment "Compress the bat into a bitvector";
diff --git a/monetdb5/optimizer/opt_bitcandidates.c
b/monetdb5/optimizer/opt_bitcandidates.c
--- a/monetdb5/optimizer/opt_bitcandidates.c
+++ b/monetdb5/optimizer/opt_bitcandidates.c
@@ -68,8 +68,7 @@ OPTbitcandidatesImplementation(Client cn
if ( isVarCList(mb, getArg(p,j)) ){
k = newTmpVariable(mb,getArgType(mb,p,j));
q= newFcnCall(mb,candidatesRef,compressRef);
- //setVarType(mb,getArg(q,0),
getArgType(mb,p,j));
- setVarType(mb,getArg(q,0),
newBatType(TYPE_bte));
+ setVarType(mb,getArg(q,0), getArgType(mb,p,j));
q= pushArgument(mb,q, k);
alias[getArg(p,j)] = getArg(q,0);
getArg(p,j) = k;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list