Changeset: 639e9b5688f8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/639e9b5688f8
Modified Files:
monetdb5/optimizer/opt_dataflow.c
Branch: parappend
Log Message:
Replicate corner case around bat.append
diffs (38 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
@@ -307,7 +307,7 @@ checkBreakpoint(Client cntxt, MalBlkPtr
}
static void
-decideRegionType(Client cntxt, MalBlkPtr mb, InstrPtr p, region_state *state)
+decideRegionType(Client cntxt, MalBlkPtr mb, InstrPtr p, States states,
region_state *state)
{
(void) cntxt;
@@ -323,6 +323,16 @@ decideRegionType(Client cntxt, MalBlkPtr
state->type = singleton_region;
} else if (isUnsafeFunction(p)) {
state->type = singleton_region;
+ } else if (
+ isUpdateInstruction(p)
+ && getModuleId(p) != sqlRef
+ && (getState(states, p, p->retc) & (VARREAD | VARBLOCK)) == 0
+ ) {
+ // Special case. Unless they're from the sql module,
instructions with
+ // names like 'append', 'update', 'delete', 'grow', etc., are
expected
+ // to express their side effects as data dependencies, for
example,
+ // X5 := bat.append(X_5, ...)
+ state->type = dataflow_region;
} else if (hasSideEffects(mb, p, false)) {
state->type = singleton_region;
} else if (isMultiplex(p)) {
@@ -456,7 +466,7 @@ OPTdataflowImplementation_wrapped(Client
memset((char*) states, 0, vlimit * sizeof(char));
top = 0;
start = i;
- decideRegionType(cntxt, mb, p, &state);
+ decideRegionType(cntxt, mb, p, states, &state);
}
// remember you assigned/read variables
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list