use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_recursive_termination_and_deduplication_in_transitivity.
@Test
public void test_recursive_termination_and_deduplication_in_transitivity() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define location sub entity, plays containment:container, plays containment:contained;" + "containment sub relation, relates contained, relates container;" + "rule transitive-containment: when {" + "(container:$x, contained:$y) isa containment;" + "(container:$y, contained:$z) isa containment;" + "} then {" + "(container:$x, contained:$z) isa containment;" + "};"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert " + "$l1 isa location; $l2 isa location; $l3 isa location; $l4 isa location; " + "(container:$l1, contained:$l2) isa containment;" + "(container:$l2, contained:$l3) isa containment;" + "(container:$l3, contained:$l4) isa containment;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ (container:$l3, contained:$l4) isa containment; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 6L, 3L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_shallow_rerequest_chain.
@Test
public void test_shallow_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;" + "man sub entity, plays marriage:husband, plays friendship:friend;" + "friendship sub relation, relates friend;" + "marriage sub relation, relates husband, relates wife;" + "rule marriage-is-friendship: when {$x isa man; $y isa woman; " + "(husband: $x, wife: $y) isa marriage; } then { (friend: $x, friend: $y) isa friendship; }; "));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
String insert = "insert $y isa woman; $x isa man; (husband: $x, wife: $y) isa marriage;";
transaction.query().insert(TypeQL.parseQuery(insert));
transaction.query().insert(TypeQL.parseQuery(insert));
String insert2 = "insert $y isa woman; $x isa woman; (wife: $x, wife: $y) isa marriage;";
transaction.query().insert(TypeQL.parseQuery(insert2));
transaction.query().insert(TypeQL.parseQuery(insert2));
String insert3 = "insert $y isa man;";
transaction.query().insert(TypeQL.parseQuery(insert3));
transaction.query().insert(TypeQL.parseQuery(insert3));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
String rootConjunction = "{ $a isa woman; $b isa man; $f(friend: $a, friend: $b) isa friendship; }";
Conjunction conjunctionPattern = resolvedConjunction(rootConjunction, transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 2L, 2L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_disjunction_no_rules.
@Test
public void test_disjunction_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 25; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 26; $t(twin1: $p1, twin2: $p2) isa twins; $p2 isa person;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Set<Identifier.Variable.Retrievable> filter = set(Identifier.Variable.name("t"), Identifier.Variable.name("p1"), Identifier.Variable.name("p2"));
Disjunction disjunction = resolvedDisjunction("{ $t(twin1: $p1, twin2: $p2) isa twins; { $p1 has age 24; } or { $p1 has age 26; }; }", transaction.logic());
createRootAndAssertResponses(transaction, disjunction, filter, 2L, 0L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_simple_rule.
@Test
public void test_simple_rule() throws InterruptedException {
try (CoreSession session = schemaSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().define(TypeQL.parseQuery("define person sub entity, owns name, owns age, plays twins:twin1, plays twins:twin2;" + "age sub attribute, value long;" + "name sub attribute, value string;" + "twins sub relation, relates twin1, relates twin2;" + "rule bobs-are-42: when { $p1 isa person, has name \"Bob\"; } then { $p1 has age 42; };"));
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 \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p1 isa person, has age 42;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
Conjunction conjunctionPattern = resolvedConjunction("{ $p1 isa person, has age 42; }", transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 6L, 3L);
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_exceptions_are_propagated.
@Test
public void test_exceptions_are_propagated() 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());
ResolverRegistry registry = transaction.reasoner().resolverRegistry();
LinkedBlockingQueue<Match.Finished> responses = new LinkedBlockingQueue<>();
AtomicLong doneReceived = new AtomicLong(0L);
LinkedBlockingQueue<Throwable> exceptions = new LinkedBlockingQueue<>();
Actor.Driver<RootResolver.Conjunction> root;
try {
root = registry.root(conjunctionPattern, responses::add, iterDone -> doneReceived.incrementAndGet(), exceptions::add);
} catch (TypeDBException e) {
fail();
}
Exception e = new RuntimeException();
registry.terminateResolvers(e);
Throwable receivedException = exceptions.poll(100, TimeUnit.MILLISECONDS);
assertEquals(e, receivedException);
}
}
}
Aggregations