Changeset: 4d607ff221f9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4d607ff221f9
Modified Files:
        monetdb5/modules/mal/mat.c
        monetdb5/modules/mal/mat.h
        monetdb5/modules/mal/mat.mal
Branch: mutation
Log Message:

Merge with default


diffs (72 lines):

diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c
--- a/monetdb5/modules/mal/mat.c
+++ b/monetdb5/modules/mal/mat.c
@@ -441,6 +441,43 @@ MATpack(Client cntxt, MalBlkPtr mb, MalS
        return MATpackInternal(stk,p);
 }
 
+// merging multiple OID lists 
+str
+MATmergepack(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
+{
+       int i, *ret = (int*) getArgReference(stk,p,0);
+       BAT *b, *bn, *bm;
+       BUN cap = 0;
+
+       (void)cntxt;
+       (void)mb;
+       for (i = 1; i < p->argc; i++) {
+               int bid = stk->stk[getArg(p,i)].val.ival;
+               b = BBPquickdesc(ABS(bid),FALSE);
+               if (b )
+                       cap += BATcount(b);
+       }
+
+       bn = BATnew(TYPE_void, TYPE_oid, cap);
+       if (bn == NULL)
+               throw(MAL, "mat.pack", MAL_MALLOC_FAIL);
+
+       for (i = 1; i < p->argc; i++) {
+               b = BATdescriptor(stk->stk[getArg(p,i)].val.ival);
+               if( b ){
+                       bm = BATmergecand(bn,b);
+                       BBPunfix(b->batCacheid);
+                       BBPunfix(bn->batCacheid);
+                       bn = bm;
+               }
+       }
+       assert(!bn->H->nil || !bn->H->nonil);
+       assert(!bn->T->nil || !bn->T->nonil);
+       BATsettrivprop(bn);
+       BBPkeepref(*ret = bn->batCacheid);
+       return MAL_SUCCEED;
+}
+
 str
 MATpackValues(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
 {
diff --git a/monetdb5/modules/mal/mat.h b/monetdb5/modules/mal/mat.h
--- a/monetdb5/modules/mal/mat.h
+++ b/monetdb5/modules/mal/mat.h
@@ -36,6 +36,7 @@
 #endif
 
 mat_export str MATpack(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
+mat_export str MATmergepack(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
 mat_export str MATpack2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 mat_export str MATpack3(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 mat_export str MATpackIncrement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
diff --git a/monetdb5/modules/mal/mat.mal b/monetdb5/modules/mal/mat.mal
--- a/monetdb5/modules/mal/mat.mal
+++ b/monetdb5/modules/mal/mat.mal
@@ -13,6 +13,10 @@ pattern pack(b:bat[:oid,:any_2]...):bat[
 address MATpack
 comment "Materialize the MAT into a BAT";
 
+pattern mergepack(b:bat[:oid,:oid]...):bat[:oid,:oid]
+address MATmergepack
+comment "Merge multiple candidate lists ";
+
 pattern pack2(b:bat[:oid,:any_2]...):bat[:oid,:any_2]
 address MATpack2
 comment "Materialize the MAT into a BAT (by an append all)";
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to