}
private static <T> T evaluate(RuntimeModule rm, String function, Object ... args) throws ValueNotFound {
- return evaluate(resolveFunction(rm, function));
+ return evaluate(resolveFunction(rm, function), args);
}
public static <T> T evaluate(String module, String function, Object ... args) throws ValueNotFound {
private static Object[] NO_ARGS = new Object[] { Tuple0.INSTANCE };
- public static <T> void asyncRead(final Function f) throws DatabaseException {
+ public static <T> void asyncRead(final Function f) throws DatabaseException {
asyncRead(f, NO_ARGS);
}
SCLContext.push(context);
context.put(GRAPH, graph);
try {
- f.apply(Tuple0.INSTANCE);
+ f.applyArray(args);
} finally {
SCLContext.pop();
}
SCLContext.push(context);
ReadGraph oldGraph = (ReadGraph)context.put(GRAPH, graph);
try {
- return (T)f.apply(Tuple0.INSTANCE);
+ return (T)f.applyArray(args);
} finally {
context.put(GRAPH, oldGraph);
SCLContext.pop();
SCLContext.push(context);
context.put(GRAPH, graph);
try {
- f.apply(args);
+ f.applyArray(args);
} finally {
SCLContext.pop();
}
public static <T> T syncWrite(final Function f, final Object ... args) throws DatabaseException {
final SCLContext context = SCLContext.getCurrent();
Object graph = context.get(GRAPH);
- if (graph != null) {
- return (T)f.apply(Tuple0.INSTANCE);
+ if (graph != null && graph instanceof WriteGraph) {
+ return (T)f.applyArray(args);
} else {
+ if (graph != null) {
+ LOGGER.error(
+ "SCLContext {} for current thread {} contains an existing graph object but it is not WriteGraph - Somewhere is a function that forgets to remove the graph from the context!!",
+ context, Thread.currentThread());
+ }
final SCLReportingHandler printer = (SCLReportingHandler)SCLContext.getCurrent().get(SCLReportingHandler.REPORTING_HANDLER);
return Simantics.getSession().syncRequest(new WriteResultRequest<T>() {
@Override
SCLReportingHandler oldPrinter = (SCLReportingHandler)context.put(SCLReportingHandler.REPORTING_HANDLER, printer);
ReadGraph oldGraph = (ReadGraph)context.put(GRAPH, graph);
try {
- return (T)f.apply(args);
+ return (T)f.applyArray(args);
} finally {
context.put(GRAPH, oldGraph);
context.put(SCLReportingHandler.REPORTING_HANDLER, oldPrinter);