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