Changeset: 59f6a273a28f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=59f6a273a28f
Modified Files:
monetdb5/optimizer/opt_dataflow.c
Branch: default
Log Message:
Off by one and update behavior
The first instruction of a dataflow block may also introduce
a variable visible outside the block.
The SQL update statements are linked already through their
first argument. This ensures proper behavior during parallel
execution. Removing this instruction will enlarge the dataflow blocks.
diffs (30 lines):
diff --git a/monetdb5/optimizer/opt_dataflow.c
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -140,7 +140,7 @@ OPTdataflowImplementation(Client cntxt,
if (p->token == ENDsymbol)
break;
- if (hasSideEffects(p,FALSE) || isUnsafeFunction(p) ||
blockCntrl(p) || (!dumbcopy && blockExit(p)) || (getModuleId(p) == sqlRef &&
isUpdateInstruction(p)) || dflowAssignTest(span,p,i) ){
+ if (hasSideEffects(p,FALSE) || isUnsafeFunction(p) ||
blockCntrl(p) || (!dumbcopy && blockExit(p)) || (getModuleId(p) != sqlRef &&
isUpdateInstruction(p)) || dflowAssignTest(span,p,i) ){
/* close old flow block */
if (flowblock){
int sf = simpleFlow(old,start,i);
@@ -148,7 +148,7 @@ OPTdataflowImplementation(Client cntxt,
for( j=start ; j<i; j++)
if (old[j])
for( k=0; k<old[j]->retc; k++)
- if(
getBeginLifespan(span,getArg(old[j],k)) > start &&
getEndLifespan(span,getArg(old[j],k)) >= i && init[getArg(old[j],k)]==0){
+ if(
getBeginLifespan(span,getArg(old[j],k)) >= start &&
getEndLifespan(span,getArg(old[j],k)) >= i && init[getArg(old[j],k)]==0){
InstrPtr r=
newAssignment(mb);
getArg(r,0)=
getArg(old[j],k);
pushNil(mb,r,getArgType(mb,old[j],k));
@@ -187,7 +187,7 @@ OPTdataflowImplementation(Client cntxt,
for( j=start ; j<i; j++)
if (old[j])
for( k=0;
k<old[j]->retc; k++)
- if(
getBeginLifespan(span,getArg(old[j],k)) > start &&
getEndLifespan(span,getArg(old[j],k)) >= i && init[getArg(old[j],k)]==0){
+ if(
getBeginLifespan(span,getArg(old[j],k)) >= start &&
getEndLifespan(span,getArg(old[j],k)) >= i && init[getArg(old[j],k)]==0){
InstrPtr r=
newAssignment(mb);
getArg(r,0)=
getArg(old[j],k);
pushNil(mb,r,getArgType(mb,old[j],k));
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list