Changeset: 3141fb18f4de for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3141fb18f4de
Modified Files:
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_remap.c
        monetdb5/optimizer/optimizer.mal
Branch: default
Log Message:

Handle errors in multiplex operations better


diffs (59 lines):

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
@@ -67,13 +67,13 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
        if (isAnyExpression(getArgType(mb, pci, 0)))
                throw(MAL, "optimizer.multiplex", "Target type is missing");
 
-       mod = VALget(&getVar(mb, getArg(pci, 1))->value);
+       mod = VALget(&getVar(mb, getArg(pci, pci->retc))->value);
        mod = putName(mod,strlen(mod));
-       fcn = VALget(&getVar(mb, getArg(pci, 2))->value);
+       fcn = VALget(&getVar(mb, getArg(pci, pci->retc+1))->value);
        fcn = putName(fcn,strlen(fcn));
 
        /* search the iterator bat */
-       for (i = 3; i < pci->argc; i++)
+       for (i = pci->retc+2; i < pci->argc; i++)
                if (isaBatType(getArgType(mb, pci, i))) {
                        iter = getArg(pci, i);
                        if (getHeadType(getVarType(mb,iter)) != TYPE_oid)
@@ -138,7 +138,7 @@ OPTexpandMultiplex(Client cntxt, MalBlkP
        q = newFcnCall(mb, mod, fcn);
        cr = getArg(q, 0) = newTmpVariable(mb, TYPE_any);
 
-       for (i = 3; i < pci->argc; i++)
+       for (i = pci->retc+2; i < pci->argc; i++)
                if (isaBatType(getArgType(mb, pci, i))) {
                        q= pushArgument(mb, q, alias[i]);
                } else {
diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -458,10 +458,9 @@ OPTremapImplementation(Client cntxt, Mal
 
 str
 OPTremapMultiplex(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p){
+       char buf[BUFSIZ];
        (void) mb;
-       (void)stk;
-       (void) p;
-       OPTDEBUGremap
-               printInstruction(cntxt->fdout,mb,0,p,LIST_MAL_ALL);
-       throw(MAL, "opt.remap", PROGRAM_NYI);
+       (void) cntxt;
+       snprintf(buf,BUFSIZ,"Function '%s.%s' not defined", (char 
*)getArgReference(stk,p,p->retc), (char *)getArgReference(stk,p,p->retc+1));
+       throw(MAL, "opt.remap", "%s",buf);
 }
diff --git a/monetdb5/optimizer/optimizer.mal b/monetdb5/optimizer/optimizer.mal
--- a/monetdb5/optimizer/optimizer.mal
+++ b/monetdb5/optimizer/optimizer.mal
@@ -428,6 +428,8 @@ address OPTwrapper
 comment "Remapping function calls to a their multiplex variant";
 
 module mal;
+pattern mal.multiplex(a:any...):any...
+address OPTremapMultiplex;
 pattern mal.multiplex(a:any...):any
 address OPTremapMultiplex;
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to