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