Changeset: e471415e7fe4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e471415e7fe4
Modified Files:
monetdb5/modules/mal/batExtensions.c
monetdb5/optimizer/opt_multiplex.c
Branch: default
Log Message:
fixed unaligned result of multiplex fallback code
diffs (83 lines):
diff --git a/monetdb5/modules/mal/batExtensions.c
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -65,6 +65,25 @@ CMDBATnew(Client cntxt, MalBlkPtr m, Mal
}
static str
+CMDBATdup(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ BAT *b, *i;
+ bat *ret= getArgReference_bat(stk, pci, 0);
+ int tt = getArgType(mb, pci, 1);
+ bat input = *getArgReference_bat(stk, pci, 2);
+
+ (void)cntxt;
+ if ((i = BATdescriptor(input)) == NULL)
+ throw(MAL, "bat.new", INTERNAL_BAT_ACCESS);
+ b = COLnew(i->hseqbase, tt, BATcount(i), TRANSIENT);
+ BBPunfix(i->batCacheid);
+ if (b == 0)
+ throw(MAL,"bat.new", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ BBPkeepref(*ret = b->batCacheid);
+ return MAL_SUCCEED;
+}
+
+static str
CMDBATsingle(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
BAT *b;
@@ -344,6 +363,7 @@ mel_func batExtensions_init_funcs[] = {
pattern("bat", "new", CMDBATnew, false, "", args(1,4,
batargany("",1),argany("tt",1),arg("size",lng),arg("persist",bit))),
pattern("bat", "new", CMDBATnew, false, "", args(1,4,
batargany("",1),argany("tt",1),arg("size",int),arg("persist",bit))),
pattern("bat", "new", CMDBATnew, false, "Creates a new empty transient BAT,
with tail-types as indicated.", args(1,3,
batargany("",1),argany("tt",1),arg("size",lng))),
+ pattern("bat", "new", CMDBATdup, false, "Creates a new empty transient BAT,
with tail-type tt and hseqbase and size from the input bat argument.",
args(1,3, batargany("",1), argany("tt",1),batargany("i",2))),
pattern("bat", "single", CMDBATsingle, false, "Create a BAT with a single
elemenet", args(1,2, batargany("",1),argany("val",1))),
pattern("bat", "partition", CMDBATpartition, false, "Create a serie of slices
over the BAT argument. The BUNs are distributed evenly.", args(1,2,
batvarargany("",1),batargany("b",1))),
pattern("bat", "partition", CMDBATpartition2, false, "Create the n-th slice
over the BAT broken into several pieces.", args(1,4,
batargany("",1),batargany("b",1),arg("pieces",int),arg("n",int))),
diff --git a/monetdb5/optimizer/opt_multiplex.c
b/monetdb5/optimizer/opt_multiplex.c
--- a/monetdb5/optimizer/opt_multiplex.c
+++ b/monetdb5/optimizer/opt_multiplex.c
@@ -17,7 +17,7 @@
* The call optimizer.multiplex(MOD,FCN,A1,...An) introduces the following code
* structure:
*
- * resB:= bat.new(A1);
+ * resB:= bat.new(restype, A1);
* barrier (h,t1):= iterator.new(A1);
* t2:= algebra.fetch(A2,h)
* ...
@@ -41,8 +41,6 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
int tt;
int bat = (getModuleId(pci) == batmalRef) ;
- //if ( optimizerIsApplied(mb,"multiplex"))
- //return 0;
(void) cntxt;
(void) stk;
for (i = 0; i < pci->retc; i++) {
@@ -93,13 +91,15 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
/* resB := new(refBat) */
for (i = 0; i < pci->retc; i++) {
- q = newFcnCall(mb, batRef, newRef);
+ q = newFcnCallArgs(mb, batRef, newRef, 2);
resB[i] = getArg(q, 0);
tt = getBatType(getArgType(mb, pci, i));
setVarType(mb, getArg(q, 0), newBatType(tt));
q = pushType(mb, q, tt);
+ q = pushArgument(mb, q, iter);
+ assert(q->argc==3);
}
/* barrier (h,r) := iterator.new(refBat); */
@@ -185,7 +185,6 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
str
OPTmultiplexSimple(Client cntxt, MalBlkPtr mb)
{
- //MalBlkPtr mb= cntxt->curprg->def;
int i, doit=0;
InstrPtr p;
str msg = MAL_SUCCEED;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list