use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ReasonerTest method test_exception_kills_query.
@Test
public void test_exception_kills_query() {
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA)) {
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.WRITE)) {
ConceptManager conceptMgr = txn.concepts();
LogicManager logicMgr = txn.logic();
EntityType milk = conceptMgr.putEntityType("milk");
AttributeType ageInDays = conceptMgr.putAttributeType("age-in-days", AttributeType.ValueType.LONG);
AttributeType isStillGood = conceptMgr.putAttributeType("is-still-good", AttributeType.ValueType.BOOLEAN);
milk.setOwns(ageInDays);
milk.setOwns(isStillGood);
logicMgr.putRule("old-milk-is-not-good", TypeQL.parsePattern("{ $x isa milk, has age-in-days >= 10; }").asConjunction(), TypeQL.parseVariable("$x has is-still-good false").asThing());
txn.commit();
}
}
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.DATA)) {
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.WRITE)) {
txn.query().insert(TypeQL.parseQuery("insert $x isa milk, has age-in-days 5;").asInsert());
txn.query().insert(TypeQL.parseQuery("insert $x isa milk, has age-in-days 10;").asInsert());
txn.commit();
}
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.READ)) {
txn.reasoner().resolverRegistry().terminateResolvers(new RuntimeException());
try {
List<ConceptMap> ans = txn.query().match(TypeQL.parseQuery("match $x isa is-still-good;").asMatch()).toList();
} catch (TypeDBException e) {
assertEquals(e.code().get(), RESOLUTION_TERMINATED.code());
return;
}
fail();
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ReasonerTest method test_no_rules.
@Test
public void test_no_rules() {
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA)) {
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.WRITE)) {
ConceptManager conceptMgr = txn.concepts();
EntityType milk = conceptMgr.putEntityType("milk");
AttributeType ageInDays = conceptMgr.putAttributeType("age-in-days", AttributeType.ValueType.LONG);
milk.setOwns(ageInDays);
txn.commit();
}
}
try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.DATA)) {
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.WRITE)) {
txn.query().insert(TypeQL.parseQuery("insert $x isa milk, has age-in-days 5;").asInsert());
txn.query().insert(TypeQL.parseQuery("insert $x isa milk, has age-in-days 10;").asInsert());
txn.commit();
}
try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.READ)) {
List<ConceptMap> ans = txn.query().match(TypeQL.parseQuery("match $x has age-in-days $a;").asMatch()).toList();
ans.iterator().forEachRemaining(a -> {
assertEquals("age-in-days", a.get("a").asThing().getType().getLabel().scopedName());
assertEquals("milk", a.get("x").asThing().getType().getLabel().scopedName());
});
assertEquals(2, ans.size());
}
}
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ReiterationTest method singleThreadElgTransaction.
private CoreTransaction singleThreadElgTransaction(CoreSession session) {
CoreTransaction transaction = session.transaction(Arguments.Transaction.Type.WRITE, new Options.Transaction().infer(true));
ActorExecutorGroup service = new ActorExecutorGroup(1, new NamedThreadFactory("typedb-actor"));
transaction.reasoner().resolverRegistry().setExecutorService(service);
return transaction;
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class TraversalTest method test_closure_backtrack_clears_scopes.
@Test
public void test_closure_backtrack_clears_scopes() {
session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA);
try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
TypeQLDefine query = TypeQL.parseQuery("define " + "lastname sub attribute, value string; " + "person sub entity, owns lastname; ");
transaction.query().define(query);
transaction.commit();
}
session.close();
session = databaseMgr.session(database, Arguments.Session.Type.DATA);
try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
TypeQLInsert query = TypeQL.parseQuery("insert " + "$x isa person," + " has lastname \"Smith\"," + " has name \"Alex\";" + "$y isa person," + " has lastname \"Smith\"," + " has name \"John\";" + "$r (friend: $x, friend: $y) isa friendship, has ref 1;" + "$r1 (friend: $x, friend: $y) isa friendship, has ref 2;" + "$reflexive (friend: $x, friend: $x) isa friendship, has ref 3;").asInsert();
transaction.query().insert(query);
transaction.commit();
}
try (CoreTransaction transaction = session.transaction(READ)) {
GraphProcedure.Builder proc = GraphProcedure.builder(10);
/*
vertices:
$_0 [thing] { hasIID: false, types: [name], predicates: [= <STRING>] } (end) // Alex
$_1 [thing] { hasIID: false, types: [name], predicates: [= <STRING>] } (end) // John
$f1 [thing] { hasIID: false, types: [friendship], predicates: [] }
$n [thing] { hasIID: false, types: [lastname], predicates: [] } (start)
$r1 [thing] { hasIID: false, types: [ref], predicates: [= <LONG>] } (end) // 3
$r2 [thing] { hasIID: false, types: [ref], predicates: [= <LONG>] } (end) // 1
$refl [thing] { hasIID: false, types: [friendship], predicates: [] }
$x [thing] { hasIID: false, types: [person], predicates: [] }
$y [thing] { hasIID: false, types: [person], predicates: [] }
*/
ProcedureVertex.Thing _0 = proc.anonymousThing(0);
_0.props().predicate(Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ));
_0.props().types(set(Label.of("name")));
ProcedureVertex.Thing _1 = proc.anonymousThing(1);
_1.props().predicate(Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ));
_1.props().types(set(Label.of("name")));
ProcedureVertex.Thing f1 = proc.namedThing("f1");
f1.props().types(set(Label.of("friendship")));
ProcedureVertex.Thing refl = proc.namedThing("refl");
refl.props().types(set(Label.of("friendship")));
ProcedureVertex.Thing n = proc.namedThing("n", true);
n.props().types(set(Label.of("lastname")));
ProcedureVertex.Thing r1 = proc.namedThing("r1");
r1.props().predicate(Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG));
r1.props().types(set(Label.of("ref")));
ProcedureVertex.Thing r2 = proc.namedThing("r2");
r2.props().predicate(Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG));
r2.props().types(set(Label.of("ref")));
ProcedureVertex.Thing x = proc.namedThing("x");
x.props().types(set(Label.of("person")));
ProcedureVertex.Thing y = proc.namedThing("y");
y.props().types(set(Label.of("person")));
GraphTraversal.Thing.Parameters params = new GraphTraversal.Thing.Parameters();
params.pushValue(_0.id().asVariable(), Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ), new GraphTraversal.Thing.Parameters.Value("Alex"));
params.pushValue(_1.id().asVariable(), Predicate.Value.String.of(TypeQLToken.Predicate.Equality.EQ), new GraphTraversal.Thing.Parameters.Value("John"));
params.pushValue(r1.id().asVariable(), Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG), new GraphTraversal.Thing.Parameters.Value(3L));
params.pushValue(r2.id().asVariable(), Predicate.Value.Numerical.of(TypeQLToken.Predicate.Equality.EQ, PredicateArgument.Value.LONG), new GraphTraversal.Thing.Parameters.Value(1L));
/*
edges:
1: ($n <--[HAS]--* $x)
2: ($n <--[HAS]--* $y)
3: ($x *--[HAS]--> $_0)
4: ($x <--[ROLEPLAYER]--* $refl) { roleTypes: [friendship:friend] }
5: ($x <--[ROLEPLAYER]--* $refl) { roleTypes: [friendship:friend] }
6: ($x <--[ROLEPLAYER]--* $f1) { roleTypes: [friendship:friend] }
7: ($y *--[HAS]--> $_1)
8: ($y <--[ROLEPLAYER]--* $f1) { roleTypes: [friendship:friend] }
9: ($refl *--[HAS]--> $r1)
10: ($f1 *--[HAS]--> $r2)
*/
proc.backwardHas(1, n, x);
proc.backwardHas(2, n, y);
proc.forwardHas(3, x, _0);
proc.backwardRolePlayer(4, x, refl, set(Label.of("friend", "friendship")));
proc.backwardRolePlayer(5, x, refl, set(Label.of("friend", "friendship")));
proc.backwardRolePlayer(6, x, f1, set(Label.of("friend", "friendship")));
proc.forwardHas(7, y, _1);
proc.backwardRolePlayer(8, y, f1, set(Label.of("friend", "friendship")));
proc.forwardHas(9, refl, r1);
proc.forwardHas(10, f1, r2);
Set<Identifier.Variable.Retrievable> filter = set(n.id().asVariable().asRetrievable(), x.id().asVariable().asRetrievable(), y.id().asVariable().asRetrievable(), refl.id().asVariable().asRetrievable(), f1.id().asVariable().asRetrievable(), r1.id().asVariable().asRetrievable(), r1.id().asVariable().asRetrievable(), _0.id().asVariable().asRetrievable(), _1.id().asVariable().asRetrievable());
GraphProcedure procedure = proc.build();
FunctionalIterator<VertexMap> vertices = procedure.iterator(transaction.traversal().graph(), params, filter);
vertices.next();
}
session.close();
}
use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.
the class ResolutionTest method test_chained_rules.
@Test
public void test_chained_rules() 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 employment:employee;" + "age sub attribute, value long;" + "name sub attribute, value string;" + "employment sub relation, relates employee;" + "rule bobs-are-42: when { $p1 isa person, has name \"Bob\"; } then { $p1 has age 42; };" + "rule those-aged-42-are-employed: when { $x has age 42; } then { (employee: $x) isa employment; };"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has name \"Bob\";"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person, has age 42;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.query().insert(TypeQL.parseQuery("insert $p isa person; $e(employee: $p) isa employment;"));
transaction.commit();
}
}
try (CoreSession session = dataSession()) {
try (CoreTransaction transaction = singleThreadElgTransaction(session)) {
String rootConjunction = "{ $e(employee: $x) isa employment; }";
Conjunction conjunctionPattern = resolvedConjunction(rootConjunction, transaction.logic());
createRootAndAssertResponses(transaction, conjunctionPattern, 9L, 6L);
}
}
}
Aggregations