use of com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache in project grakn by graknlabs.
the class ConcludableResolver method createRequestState.
protected CachingRequestState<?, ConceptMap> createRequestState(Request fromUpstream, int iteration) {
LOG.debug("{}: Creating new Responses for iteration{}, request: {}", name(), iteration, fromUpstream);
Driver<? extends Resolver<?>> root = fromUpstream.partialAnswer().root();
cacheRegistersByRoot.putIfAbsent(root, new HashMap<>());
Map<ConceptMap, AnswerCache<?, ConceptMap>> cacheRegister = cacheRegistersByRoot.get(root);
ConceptMap answerFromUpstream = fromUpstream.partialAnswer().conceptMap();
CachingRequestState<?, ConceptMap> requestState;
assert fromUpstream.partialAnswer().isConcludable();
if (fromUpstream.partialAnswer().asConcludable().isExplain()) {
if (cacheRegister.containsKey(answerFromUpstream)) {
if (cacheRegister.get(answerFromUpstream).isConceptMapCache()) {
// We have a cache already which we must evict to use a cache suitable for explaining
ConcludableAnswerCache answerCache = new ConcludableAnswerCache(cacheRegister, answerFromUpstream);
cacheRegister.put(answerFromUpstream, answerCache);
requestState = new Explain(fromUpstream, answerCache, iteration);
registerRules(fromUpstream, requestState.asExploration());
} else if (cacheRegister.get(answerFromUpstream).isConcludableAnswerCache()) {
ConcludableAnswerCache answerCache = cacheRegister.get(answerFromUpstream).asConcludableAnswerCache();
requestState = new FollowingExplain(fromUpstream, answerCache, iteration);
} else {
throw TypeDBException.of(ILLEGAL_STATE);
}
} else {
ConcludableAnswerCache answerCache = new ConcludableAnswerCache(cacheRegister, answerFromUpstream);
cacheRegister.put(answerFromUpstream, answerCache);
requestState = new Explain(fromUpstream, answerCache, iteration);
registerRules(fromUpstream, requestState.asExploration());
}
} else if (fromUpstream.partialAnswer().asConcludable().isMatch()) {
if (cacheRegister.containsKey(answerFromUpstream)) {
if (cacheRegister.get(answerFromUpstream).isConceptMapCache()) {
ConceptMapCache answerCache = cacheRegister.get(answerFromUpstream).asConceptMapCache();
requestState = new FollowingMatch(fromUpstream, answerCache, iteration);
} else if (cacheRegister.get(answerFromUpstream).isConcludableAnswerCache()) {
ConcludableAnswerCache answerCache = cacheRegister.get(answerFromUpstream).asConcludableAnswerCache();
requestState = new FollowingExplain(fromUpstream, answerCache, iteration);
} else {
throw TypeDBException.of(ILLEGAL_STATE);
}
} else {
ConceptMapCache answerCache = new ConceptMapCache(cacheRegister, answerFromUpstream);
cacheRegister.put(answerFromUpstream, answerCache);
if (!answerCache.completeIfSubsumerComplete()) {
answerCache.addSource(traversalIterator(concludable.pattern(), answerFromUpstream));
}
boolean singleAnswerRequired = answerFromUpstream.concepts().keySet().containsAll(unboundVars);
requestState = new Match(fromUpstream, answerCache, iteration, singleAnswerRequired);
registerRules(fromUpstream, requestState.asExploration());
}
} else {
throw TypeDBException.of(ILLEGAL_STATE);
}
return requestState;
}
use of com.vaticle.typedb.core.reasoner.resolution.framework.AnswerCache.SubsumptionAnswerCache.ConceptMapCache in project grakn by graknlabs.
the class RetrievableResolver method createRequestState.
protected RetrievableRequestState createRequestState(Request fromUpstream, int iteration) {
LOG.debug("{}: Creating a new RequestState for iteration:{}, request: {}", name(), iteration, fromUpstream);
assert fromUpstream.partialAnswer().isRetrievable();
Driver<? extends Resolver<?>> root = fromUpstream.partialAnswer().root();
cacheRegistersByRoot.putIfAbsent(root, new HashMap<>());
Map<ConceptMap, AnswerCache<ConceptMap, ConceptMap>> cacheRegister = cacheRegistersByRoot.get(root);
AnswerCache<ConceptMap, ConceptMap> answerCache = cacheRegister.computeIfAbsent(fromUpstream.partialAnswer().conceptMap(), upstreamAns -> {
ConceptMapCache newCache = new ConceptMapCache(cacheRegister, upstreamAns);
if (!newCache.completeIfSubsumerComplete())
newCache.addSource(traversalIterator(retrievable.pattern(), upstreamAns));
return newCache;
});
return new RetrievableRequestState(fromUpstream, answerCache, iteration);
}
Aggregations