use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_deep_rerequest_chain.
@Test
public void test_deep_rerequest_chain() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define woman sub entity, plays marriage:wife, plays friendship:friend, plays employment:employee, plays association:associated;" + "man sub entity, plays marriage:husband, plays friendship:friend;" + "friendship sub relation, relates friend;" + "company sub entity, plays employment:employer, plays association:associated;" + "marriage sub relation, relates husband, relates wife;" + "employment sub relation, relates employee, relates employer;" + "association sub relation, relates associated;" + "rule marriage-is-friendship: when {$x isa man; $y isa woman; " + "(husband: $x, wife: $y) isa marriage; } then { (friend: $x, friend: $y) isa friendship; }; " + "rule employment-is-association: when {$x isa woman; $y isa company; " + "(employee: $x, employer: $y) isa employment; } then { (associated: $x, associated: $y) isa association; }; "));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Stream.of("insert $y isa woman; $x isa man; (husband: $x, wife: $y) isa marriage; (employee: $y, employer: $z) isa employment; $z isa company;", "insert $y isa woman; $x isa man; (husband: $x, wife: $y) isa marriage;", "insert $y isa woman; $x isa woman; (wife: $x, wife: $y) isa marriage;", "insert $y isa man;", "insert $y isa woman;", "insert $y isa woman; (employee: $y, employer: $z) isa employment; $z isa company;", "insert $z isa company;").forEach(q -> transaction.query().insert(TypeQL.parseQuery(q)));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $x isa man; " + "(friend: $x, friend: $y) isa friendship; $y isa woman; (associated: $y, associated: $z) isa association; $z isa company; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 1L, 1L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_conjunction_no_rules.
@Test
public void test_conjunction_no_rules() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns age, plays twins:twin1, plays twins:twin2;" + "age sub attribute, value long;" + "twins sub relation, relates twin1, relates twin2;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $t(twin1: $p1, twin2: $p2) isa twins; $p1 has age $a; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 3L, 0L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method createRootAndAssertResponses.
private void createRootAndAssertResponses(CoreTransaction transaction, Disjunction disjunction, Set<Identifier.Variable.Retrievable> filter, long answerCount, long explainableAnswers) throws InterruptedException {
ResolverRegistry registry = transaction.reasoner().resolverRegistry();
LinkedBlockingQueue<Match.Finished> responses = new LinkedBlockingQueue<>();
AtomicLong doneReceived = new AtomicLong(0L);
Actor.Driver<RootResolver.Disjunction> root;
try {
root = registry.root(disjunction, responses::add, iterDone -> doneReceived.incrementAndGet(), (throwable) -> fail());
} catch (TypeDBException e) {
fail();
return;
}
assertResponses(root, filter, responses, doneReceived, answerCount, explainableAnswers);
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_no_rules_with_no_answers.
@Test
public void test_no_rules_with_no_answers() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns age, plays twins:twin1, plays twins:twin2;" + "age sub attribute, value long;" + "twins sub relation, relates twin1, relates twin2;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 24;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $t(twin1: $p1, twin2: $p2) isa twins; " + "$p1 has age $a; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 0L, 0L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_nested_disjunction.
@Test
public void test_nested_disjunction() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns age, owns name;" + "age sub attribute, value long;" + "name sub attribute, value string;" + "rule bobs-are-42: when { $p1 has name \"Bob\"; } then { $p1 has age 42; };" + "rule susans-are-24: when { $p1 has name \"Susan\"; } then { $p1 has age 24; };"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has name \"Susan\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 30;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $p isa person; not { { $p has age 24; } or { $p has age 42; }; }; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 1L, 0L);
}
}
}
Aggregations