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

Reply via email to