use of com.vaticle.typedb.core.concept.answer.ConceptMap in project grakn by graknlabs.
the class AnswerStateTest method test_root_partially_mapped_to_downstream_and_back.
@Test
public void test_root_partially_mapped_to_downstream_and_back() {
Map<Identifier.Variable.Retrievable, Identifier.Variable.Retrievable> mapping = new HashMap<>();
mapping.put(Identifier.Variable.name("a"), Identifier.Variable.name("x"));
mapping.put(Identifier.Variable.name("b"), Identifier.Variable.name("y"));
Map<Identifier.Variable.Retrievable, Concept> concepts = new HashMap<>();
concepts.put(Identifier.Variable.name("a"), new MockConcept(0));
Set<Identifier.Variable.Retrievable> filter = set(Identifier.Variable.name("a"), Identifier.Variable.name("b"));
Concludable.Match<?> mapped = InitialImpl.create(filter, new ConceptMap(), null, false).toDownstream().with(new ConceptMap(concepts)).toDownstream(Mapping.of(mapping), null);
Map<Identifier.Variable.Retrievable, Concept> expectedMapped = new HashMap<>();
expectedMapped.put(Identifier.Variable.name("x"), new MockConcept(0));
assertEquals(new ConceptMap(expectedMapped), mapped.conceptMap());
Map<Identifier.Variable.Retrievable, Concept> downstreamConcepts = new HashMap<>();
downstreamConcepts.put(Identifier.Variable.name("x"), new MockConcept(0));
downstreamConcepts.put(Identifier.Variable.name("y"), new MockConcept(1));
Partial.Compound<?, ?> partial = mapped.toUpstreamLookup(new ConceptMap(downstreamConcepts), false);
Map<Identifier.Variable.Retrievable, Concept> expectedWithInitial = new HashMap<>();
expectedWithInitial.put(Identifier.Variable.name("a"), new MockConcept(0));
expectedWithInitial.put(Identifier.Variable.name("b"), new MockConcept(1));
assertEquals(new ConceptMap(expectedWithInitial), partial.conceptMap());
}
use of com.vaticle.typedb.core.concept.answer.ConceptMap in project grakn by graknlabs.
the class Mapping method unTransform.
public ConceptMap unTransform(ConceptMap conceptMap) {
assert reverseMapping.size() == conceptMap.concepts().size();
Map<Retrievable, Concept> transformed = new HashMap<>();
for (Map.Entry<Retrievable, ? extends Concept> entry : conceptMap.concepts().entrySet()) {
Retrievable id = entry.getKey();
assert reverseMapping.containsKey(id);
Concept concept = entry.getValue();
transformed.put(reverseMapping.get(id), concept);
}
// we ignore explainables because they can't be mapped here
return new ConceptMap(transformed);
}
use of com.vaticle.typedb.core.concept.answer.ConceptMap in project grakn by graknlabs.
the class ConclusionResolver method receiveAnswer.
@Override
protected void receiveAnswer(Response.Answer fromDownstream, int iteration) {
LOG.trace("{}: received Answer: {}", name(), fromDownstream);
if (isTerminated())
return;
Request toDownstream = fromDownstream.sourceRequest();
Request fromUpstream = fromUpstream(toDownstream);
ConclusionRequestState<? extends Partial.Concludable<?>> requestState = this.requestStates.get(fromUpstream);
if (!requestState.isComplete()) {
FunctionalIterator<Map<Identifier.Variable, Concept>> materialisations = conclusion.materialise(fromDownstream.answer().conceptMap(), traversalEngine, conceptMgr);
if (!materialisations.hasNext())
throw TypeDBException.of(ILLEGAL_STATE);
requestState.newMaterialisedAnswers(fromDownstream.answer(), materialisations);
}
nextAnswer(fromUpstream, requestState, iteration);
}
use of com.vaticle.typedb.core.concept.answer.ConceptMap in project grakn by graknlabs.
the class QueryService method insert.
private void insert(String queryStr, Options.Query options, UUID reqID) {
TypeQLInsert query = TypeQL.parseQuery(queryStr).asInsert();
Context.Query context = new Context.Query(transactionSvc.context(), options.query(query), query);
FunctionalIterator<ConceptMap> answers = queryMgr.insert(query, context);
transactionSvc.stream(answers, reqID, context.options(), a -> insertResPart(reqID, a));
}
use of com.vaticle.typedb.core.concept.answer.ConceptMap in project grakn by graknlabs.
the class ConcludableResolver method receiveFail.
@Override
protected void receiveFail(Response.Fail fromDownstream, int iteration) {
LOG.trace("{}: received Fail: {}", name(), fromDownstream);
if (isTerminated())
return;
Request toDownstream = fromDownstream.sourceRequest();
Request fromUpstream = fromUpstream(toDownstream);
if (iteration < iterationByRoot.get(fromUpstream.partialAnswer().root())) {
// short circuit old iteration failed messages to upstream
failToUpstream(fromUpstream, iteration);
} else {
CachingRequestState<?, ConceptMap> requestState = this.requestStates.get(fromUpstream);
assert iteration == requestState.iteration();
if (requestState.isExploration()) {
requestState.asExploration().downstreamManager().removeDownstream(fromDownstream.sourceRequest());
}
nextAnswer(fromUpstream, requestState, iteration);
}
}
Aggregations