use of com.vaticle.typedb.core.database.CoreSession in project grakn by graknlabs.
the class RuleTest method rule_with_ambiguous_then_throws.
@Test
public void rule_with_ambiguous_then_throws() throws IOException {
Util.resetDirectory(dataDir);
try (CoreDatabaseManager databaseMgr = CoreDatabaseManager.open(options)) {
databaseMgr.create(database);
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA)) {
try (CoreTransaction txn = session.transaction(Arguments.Transaction.Type.WRITE)) {
txn.query().define(TypeQL.parseQuery("define " + "person sub entity, plays marriage:husband, plays marriage:wife;" + "marriage sub relation, relates husband, relates wife;"));
assertThrows(() -> txn.logic().putRule("invalid-marriage-insertion", TypeQL.parsePattern("{$x isa person;}").asConjunction(), TypeQL.parseVariable("(role: $x) isa marriage;").asThing()));
}
}
}
}
use of com.vaticle.typedb.core.database.CoreSession in project grakn by graknlabs.
the class RuleTest method rule_that_cannot_be_inserted_throws_an_error.
@Test
public void rule_that_cannot_be_inserted_throws_an_error() throws IOException {
Util.resetDirectory(dataDir);
try (CoreDatabaseManager databaseMgr = CoreDatabaseManager.open(options)) {
databaseMgr.create(database);
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA)) {
try (CoreTransaction txn = session.transaction(Arguments.Transaction.Type.WRITE)) {
final ConceptManager conceptMgr = txn.concepts();
final EntityType animal = conceptMgr.putEntityType("animal");
final EntityType person = conceptMgr.putEntityType("person");
final EntityType dog = conceptMgr.putEntityType("dog");
final AttributeType name = conceptMgr.putAttributeType("name", AttributeType.ValueType.STRING);
person.setOwns(name);
person.setSupertype(animal);
dog.setSupertype(animal);
assertThrows(() -> txn.logic().putRule("animals-are-named-fido", TypeQL.parsePattern("{$x isa animal;}").asConjunction(), TypeQL.parseVariable("$x has name 'fido'").asThing()));
}
}
}
}
use of com.vaticle.typedb.core.database.CoreSession 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.CoreSession 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.CoreSession 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);
}
}
}
Aggregations