Changeset: 530272461295 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=530272461295
Modified Files:
        monetdb5/scheduler/Tests/matpack02.mal
        monetdb5/scheduler/mut_join.c
Branch: mutation
Log Message:

Dont rely on the stack for mutation
Mutation looks ahead in the plan and does not have
runtime information available.


diffs (62 lines):

diff --git a/monetdb5/scheduler/Tests/matpack02.mal 
b/monetdb5/scheduler/Tests/matpack02.mal
--- a/monetdb5/scheduler/Tests/matpack02.mal
+++ b/monetdb5/scheduler/Tests/matpack02.mal
@@ -16,7 +16,7 @@ end initialize;
 
 function query(b:bat[:oid,:lng],c:bat[:oid,:lng],d:bat[:oid,:lng]):lng;
        t0:= alarm.usec();
-       m:= mat.pack(b,c,d);
+       m:= mat.pack(c,c,d);
        b1:= bat.partition(b,2,0);
        b2:= bat.partition(b,2,1);
        (s1,v1):= algebra.join(b1,m);
diff --git a/monetdb5/scheduler/mut_join.c b/monetdb5/scheduler/mut_join.c
--- a/monetdb5/scheduler/mut_join.c
+++ b/monetdb5/scheduler/mut_join.c
@@ -77,8 +77,7 @@ void
 mutationJoin(Client cntxt, Mutant m){
     int pc = m->target, i, limit, v1,v2, z1,z2;
     InstrPtr p=0, *old= m->src->stmt, q;
-    int profiler;
-       BAT *bl, *br;
+    int profiler, arg=3;
 
     (void) cntxt;
     limit= m->src->stop;
@@ -94,27 +93,15 @@ mutationJoin(Client cntxt, Mutant m){
                        }
                        profiler = m->src->profiler[i].trace;
 
-                       // switch the roles if needed
-                       p = getInstrPtr(m->src, pc);
-                       bl = BBPquickdesc(m->stk->stk[getArg(p,3)].val.bval, 
TRUE);
-                       br = BBPquickdesc(m->stk->stk[getArg(p,4)].val.bval, 
TRUE);
-                       if (bl && br && BATcount(bl) < BATcount(br)){
-                               mutationJoin_(m->src, m->stk, p, getArg(p,3), 
2, 0, profiler, &v1, &z1);
-                               mutationJoin_(m->src, m->stk, p, getArg(p,3), 
2, 1, profiler, &v2, &z2);
-                               
mutationPropagate(m,old,i,limit,getArg(p,0),v1,v2,profiler);
-                               
mutationPropagate(m,old,i,limit,getArg(p,1),z1,z2,profiler);
-                               q= newStmt(m->src, languageRef, passRef);
-                               q = pushArgument(m->src,q,getArg(p,3));
-                               m->src->profiler[m->src->stop-1].trace = 
profiler;
-                       } else {
-                               mutationJoin_(m->src, m->stk, p, getArg(p,4), 
2, 0, profiler, &v1, &z1);
-                               mutationJoin_(m->src, m->stk, p, getArg(p,4), 
2, 1, profiler, &v2, &z2);
-                               
mutationPropagate(m,old,i,limit,getArg(p,0),v1,v2,profiler);
-                               
mutationPropagate(m,old,i,limit,getArg(p,1),z1,z2,profiler);
-                               q= newStmt(m->src, languageRef, passRef);
-                               q = pushArgument(m->src,q,getArg(p,4));
-                               m->src->profiler[m->src->stop-1].trace = 
profiler;
-                       }
+                       // switch the roles randomly
+                       if (rand() < RAND_MAX/2) arg = 4;
+                       mutationJoin_(m->src, m->stk, p, getArg(p,arg), 2, 0, 
profiler, &v1, &z1);
+                       mutationJoin_(m->src, m->stk, p, getArg(p,arg), 2, 1, 
profiler, &v2, &z2);
+                       
mutationPropagate(m,old,i,limit,getArg(p,0),v1,v2,profiler);
+                       
mutationPropagate(m,old,i,limit,getArg(p,1),z1,z2,profiler);
+                       q= newStmt(m->src, languageRef, passRef);
+                       q = pushArgument(m->src,q,getArg(p,arg));
+                       m->src->profiler[m->src->stop-1].trace = profiler;
                        m->comment = GDKstrdup("mutationJoin");
                } else
                        pushInstruction(m->src,p);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to