import java.util.LinkedList;
import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.impl.DebugPolicy;
import org.simantics.db.impl.graph.ReadGraphImpl;
import org.simantics.db.procedure.AsyncProcedure;
import org.simantics.db.procedure.Procedure;
request = null;
super.discard();
}
+
+ @Override
+ public void setPending() {
+ if(result != NO_RESULT) {
+ //new Exception("result = " + result).printStackTrace();
+ }
+ statusOrException = PENDING;
+ result = REQUIRES_COMPUTATION;
+ }
public ExternalReadEntry(ExternalRead<T> request) {
assert request != null;
}
+ @Override
+ public void except(Throwable t) {
+ if(DebugPolicy.QUERY_STATE) System.out.println("[QUERY STATE]: excepted " + this);
+ if(statusOrException != DISCARDED) {
+ statusOrException = EXCEPTED;
+ result = t;
+ } else {
+ result = t;
+ }
+ assert(isExcepted());
+ }
+
+ @Override
+ public void setResult(Object result) {
+ super.setResult(result);
+ assert(!(result instanceof Throwable));
+ assert(!isExcepted());
+ }
+
@Override
final public Query getQuery() {
// Update
if(!items.isEmpty()) {
+ setReady();
setResult(items.removeFirst());
}
// Reschedule
// Do nothing - the state is already set and cannot be recomputed on demand
}
- @Override
+ //@Override
public Object compute(ReadGraphImpl graph, AsyncProcedure<T> procedure) throws DatabaseException {
return graph.processor.cache.performQuery(graph, request, this, procedure);
}