Changeset: da41db51ae37 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da41db51ae37
Modified Files:
        monetdb5/mal/mal_recycle.c
        monetdb5/scheduler/run_memo.c
Branch: sciql
Log Message:

merged from default


diffs (truncated from 322 to 300 lines):

diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -69,6 +69,7 @@
 #include "mal_interpreter.h"
 #include "mal_function.h"
 #include "mal_listing.h"
+#include "mal_runtime.h"
 
 static MT_Lock recycleLock ;
 MalBlkPtr recycleBlk = NULL;
diff --git a/monetdb5/scheduler/run_memo.c b/monetdb5/scheduler/run_memo.c
--- a/monetdb5/scheduler/run_memo.c
+++ b/monetdb5/scheduler/run_memo.c
@@ -31,25 +31,25 @@
  * The arguments of the second dictate which instructions to consider
  * for cost evaluation.
  * @example
- *     ...
- *     scheduler.choice("getVolume");
- *     T1:= algebra.join(A,B);
- *     T2:= algebra.join(B,C);
- *     T3:= algebra.join(C,D);
- *     scheduler.choice("getVolume",T1,T2,T3);
- *     T4:= algebra.join(T1,C);
- *     T5:= algebra.join(A,T2);
- *     T6:= algebra.join(T2,D);
- *     T7:= algebra.join(B,T3);
- *     T8:= algebra.join(C,D);
- *     scheduler.choice("getVolume",T4,T5,T6,T7,T8);
- *     T9:= algebra.join(T4,D);
- *     T10:= algebra.join(T5,D);
- *     T11:= algebra.join(A,T6);
- *     T12:= algebra.join(A,T7);
- *     T13:= algebra.join(T1,T8);
- *     scheduler.choice("getVolume",T9,T10,T11,T12,T13);
- *     answer:= scheduler.pick(T9, T10, T11, T12, T13);
+ *  ...
+ *  scheduler.choice("getVolume");
+ *  T1:= algebra.join(A,B);
+ *  T2:= algebra.join(B,C);
+ *  T3:= algebra.join(C,D);
+ *  scheduler.choice("getVolume",T1,T2,T3);
+ *  T4:= algebra.join(T1,C);
+ *  T5:= algebra.join(A,T2);
+ *  T6:= algebra.join(T2,D);
+ *  T7:= algebra.join(B,T3);
+ *  T8:= algebra.join(C,D);
+ *  scheduler.choice("getVolume",T4,T5,T6,T7,T8);
+ *  T9:= algebra.join(T4,D);
+ *  T10:= algebra.join(T5,D);
+ *  T11:= algebra.join(A,T6);
+ *  T12:= algebra.join(A,T7);
+ *  T13:= algebra.join(T1,T8);
+ *  scheduler.choice("getVolume",T9,T10,T11,T12,T13);
+ *  answer:= scheduler.pick(T9, T10, T11, T12, T13);
  * @end example
  *
  * The @code{scheduler.choice()} operator calls a builtin @code{getVolume}
@@ -84,17 +84,17 @@
  * part of the plan as well. Then you don't have to
  * include a hardwired cost function.
  * @example
- *     Acost:= aggr.count(A);
- *     Bcost:= aggr.count(B);
- *     Ccost:= aggr.count(C);
- *     T1cost:= Acost+Bcost;
- *     T2cost:= Bcost+Ccost;
- *     T3cost:= Ccost+Dcost;
- *     scheduler.choice(T1cost,T1, T2cost,T2, T3cost,T3);
- *     T1:= algebra.join(A,B);
- *     T2:= algebra.join(B,C);
- *     T3:= algebra.join(C,D);
- *     ...
+ *  Acost:= aggr.count(A);
+ *  Bcost:= aggr.count(B);
+ *  Ccost:= aggr.count(C);
+ *  T1cost:= Acost+Bcost;
+ *  T2cost:= Bcost+Ccost;
+ *  T3cost:= Ccost+Dcost;
+ *  scheduler.choice(T1cost,T1, T2cost,T2, T3cost,T3);
+ *  T1:= algebra.join(A,B);
+ *  T2:= algebra.join(B,C);
+ *  T3:= algebra.join(C,D);
+ *  ...
  * @end example
  * The current implementation assumes a regular plan
  * and unique use of variables.
@@ -106,27 +106,28 @@
  */
 #include "monetdb_config.h"
 #include "run_memo.h"
+#include "mal_runtime.h"
 
 static void
-propagateNonTarget(MalBlkPtr mb, int pc){
+propagateNonTarget(MalBlkPtr mb, int pc)
+{
        int i;
        InstrPtr p;
-       str scheduler= putName("scheduler",9);
+       str scheduler = putName("scheduler", 9);
 
-       for(; pc< mb->stop; pc++){
-               p= getInstrPtr(mb,pc);
-               if( getModuleId(p)== scheduler)
+       for (; pc < mb->stop; pc++) {
+               p = getInstrPtr(mb, pc);
+               if (getModuleId(p) == scheduler)
                        continue;
-               for(i=0; i<p->argc; i++)
-                       if( isVarDisabled(mb,getArg(p,i)) && p->token >=0 )
-                               p->token = -p->token; /* temporary NOOP */
-               if( p->token<0)
-                       for(i=0; i<p->retc; i++)
-                               setVarDisabled(mb,getArg(p,i));
+               for (i = 0; i < p->argc; i++)
+                       if (isVarDisabled(mb, getArg(p, i)) && p->token >= 0)
+                               p->token = -p->token;  /* temporary NOOP */
+               if (p->token < 0)
+                       for (i = 0; i < p->retc; i++)
+                               setVarDisabled(mb, getArg(p, i));
        }
 }
 /*
- * @-
  * THe choice operator first searches the next one to identify
  * the fragment to be optimized and to gain access to the variables
  * without the need to declare them upfront.
@@ -136,127 +137,129 @@ RUNchoice(Client cntxt, MalBlkPtr mb, Ma
 {
        int target;
        lng cost, mincost;
-       int i,j,pc;
+       int i, j, pc;
        char *nme;
        InstrPtr q;
 
-       pc= getPC(mb,p);
-       for(i=pc+1; i<mb->stop; i++){
-               q= getInstrPtr(mb,i);
-               if( getModuleId(p)== getModuleId(q) &&
-                       getFunctionId(p) == getFunctionId(q)){
-                       p=q;
+       pc = getPC(mb, p);
+       for (i = pc + 1; i < mb->stop; i++) {
+               q = getInstrPtr(mb, i);
+               if (getModuleId(p) == getModuleId(q) &&
+                       getFunctionId(p) == getFunctionId(q)) {
+                       p = q;
                        break;
                }
        }
-       if( i == mb->stop)
+       if (i == mb->stop)
                return MAL_SUCCEED;
-       target= getArg(p,2);
-       if( getArgType(mb,p,1)== TYPE_int && p->argc>=3 && (p->argc-1)%2 ==0){
+       target = getArg(p, 2);
+       if (getArgType(mb, p, 1) == TYPE_int && p->argc >= 3 && (p->argc - 1) % 
2 == 0) {
                /* choice pairs */
-               mincost= *(int*) getArgReference(stk,p,1);
-               for(i=3; i<p->argc; i+= 2){
-                       cost= *(int*) getArgReference(stk,p,i);
-                       if( cost <mincost && !isVarDisabled(mb,getArg(p,i+1))){
-                               mincost= cost;
-                               target= getArg(p,i+1);
+               mincost = *(int *) getArgReference(stk, p, 1);
+               for (i = 3; i < p->argc; i += 2) {
+                       cost = *(int *) getArgReference(stk, p, i);
+                       if (cost < mincost && !isVarDisabled(mb, getArg(p, i + 
1))) {
+                               mincost = cost;
+                               target = getArg(p, i + 1);
                        }
                }
-       } else
-       if( getArgType(mb,p,1)== TYPE_str){
-               nme= *(str*) getArgReference(stk,p,1);
+       } else if (getArgType(mb, p, 1) == TYPE_str) {
+               nme = *(str *) getArgReference(stk, p, 1);
                /* should be generalized to allow an arbitrary user defined 
function */
-               if( strcmp(nme,"getVolume")!= 0)
-                       throw(MAL,"scheduler.choice",ILLEGAL_ARGUMENT "Illegal 
cost function");
+               if (strcmp(nme, "getVolume") != 0)
+                       throw(MAL, "scheduler.choice", ILLEGAL_ARGUMENT 
"Illegal cost function");
 
-               mincost= -1;
-               for(j=2;j<p->argc; j++){
-                       if(     !isVarDisabled(mb,getArg(p,j)) )
-                       for(i= pc+1; i<mb->stop; i++){
-                               InstrPtr q= getInstrPtr(mb,i);
-                               if(p->token >=0 && getArg(q,0)== getArg(p,j)){
-                                       cost= getVolume(stk,q,1);
-                                       if( cost>0 && (cost<mincost || 
mincost== -1)){
-                                               mincost= cost;
-                                               target= getArg(p,j);
+               mincost = -1;
+               for (j = 2; j < p->argc; j++) {
+                       if (!isVarDisabled(mb, getArg(p, j)))
+                               for (i = pc + 1; i < mb->stop; i++) {
+                                       InstrPtr q = getInstrPtr(mb, i);
+                                       if (p->token >= 0 && getArg(q, 0) == 
getArg(p, j)) {
+                                               cost = getVolume(stk, q, 1);
+                                               if (cost > 0 && (cost < mincost 
|| mincost == -1)) {
+                                                       mincost = cost;
+                                                       target = getArg(p, j);
+                                               }
+                                               break;
                                        }
-                                       break;
                                }
-                       }
+
                }
        }
 #ifdef DEBUG_RUN_MEMORUN
-               mnstr_printf(cntxt->fdout,"#function target %s cost 
%d\n",getVarName(mb,target),mincost);
+       mnstr_printf(cntxt->fdout, "#function target %s cost %d\n", 
getVarName(mb, target), mincost);
 #else
        (void) cntxt;
 #endif
        /* remove non-qualifying variables */
-       for(i=2; i<p->argc; i+= 2)
-               if( getArg(p,i) != target){
-                       setVarDisabled(mb,getArg(p,i-1));
-                       setVarDisabled(mb,getArg(p,i));
+       for (i = 2; i < p->argc; i += 2)
+               if (getArg(p, i) != target) {
+                       setVarDisabled(mb, getArg(p, i - 1));
+                       setVarDisabled(mb, getArg(p, i));
                }
-       propagateNonTarget(mb,pc+1);
+
+       propagateNonTarget(mb, pc + 1);
 #ifdef DEBUG_RUN_MEMORUN
-       mnstr_printf(cntxt->fdout,"#cost choice selected %s %d\n",
-               getVarName(mb,target),mincost);
-       printFunction(cntxt->fdout,mb,1);
+       mnstr_printf(cntxt->fdout, "#cost choice selected %s %d\n",
+                       getVarName(mb, target), mincost);
+       printFunction(cntxt->fdout, mb, 1);
 #endif
        return MAL_SUCCEED;
 }
 /*
- * @-
  * At the end of the query plan we save the result in
  * a separate variable.
  */
 str
 RUNpickResult(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
 {
-       ValPtr lhs,rhs;
+       ValPtr lhs, rhs;
        int i;
 
        (void) cntxt;
-       lhs= &stk->stk[getArg(p,0)];
-       for(i=p->retc; i<p->argc; i++)
-               if( !isVarDisabled(mb,getArg(p,i))){
-                       rhs= &stk->stk[getArg(p,i)];
-                       if( (rhs)->vtype < TYPE_str)
+       lhs = &stk->stk[getArg(p, 0)];
+       for (i = p->retc; i < p->argc; i++)
+               if (!isVarDisabled(mb, getArg(p, i))) {
+                       rhs = &stk->stk[getArg(p, i)];
+                       if ((rhs)->vtype < TYPE_str)
                                *lhs = *rhs;
-                       else VALcopy(lhs,rhs);
-                       if( lhs->vtype == TYPE_bat)
+                       else
+                               VALcopy(lhs, rhs);
+                       if (lhs->vtype == TYPE_bat)
                                BBPincref(lhs->val.bval, TRUE);
                        return MAL_SUCCEED;
                }
-       throw(MAL,"scheduler.pick", OPERATION_FAILED "No result available");
+
+       throw(MAL, "scheduler.pick", OPERATION_FAILED "No result available");
 }
 /*
- * @-
  * The routine below calculates a cost based on the BAT volume in bytes.
  * The MAL compiler ensures that all arguments have been
  * assigned a value.
  */
 str
-RUNvolumeCost(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p){
-       lng *cost= (lng*) getArgReference(stk,p,0);
+RUNvolumeCost(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
+{
+       lng *cost = (lng *) getArgReference(stk, p, 0);
        (void) mb;
 
        (void) cntxt;
-       *cost = getVolume(stk,p,0); /* calculate total input size */
+       *cost = getVolume(stk, p, 0); /* calculate total input size */
        return MAL_SUCCEED;
 }
 /*
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to