Search in sources :

Example 6 with CoreSession

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()));
            }
        }
    }
}
Also used : CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) CoreSession(com.vaticle.typedb.core.database.CoreSession) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Example 7 with CoreSession

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()));
            }
        }
    }
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) EntityType(com.vaticle.typedb.core.concept.type.EntityType) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) CoreSession(com.vaticle.typedb.core.database.CoreSession) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Example 8 with CoreSession

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);
        }
    }
}
Also used : Util.resolvedConjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) CoreSession(com.vaticle.typedb.core.database.CoreSession) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Example 9 with CoreSession

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);
        }
    }
}
Also used : Util.resolvedConjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction) Conjunction(com.vaticle.typedb.core.pattern.Conjunction) CoreSession(com.vaticle.typedb.core.database.CoreSession) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Example 10 with CoreSession

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);
        }
    }
}
Also used : Util.resolvedDisjunction(com.vaticle.typedb.core.reasoner.resolution.Util.resolvedDisjunction) Disjunction(com.vaticle.typedb.core.pattern.Disjunction) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) CoreSession(com.vaticle.typedb.core.database.CoreSession) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Aggregations

CoreSession (com.vaticle.typedb.core.database.CoreSession)45 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)42 Test (org.junit.Test)42 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)23 EntityType (com.vaticle.typedb.core.concept.type.EntityType)23 AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)21 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)18 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)16 Conjunction (com.vaticle.typedb.core.pattern.Conjunction)14 RelationType (com.vaticle.typedb.core.concept.type.RelationType)13 LogicManager (com.vaticle.typedb.core.logic.LogicManager)10 Util.resolvedConjunction (com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction)10 Identifier (com.vaticle.typedb.core.traversal.common.Identifier)8 Options (com.vaticle.typedb.core.common.parameters.Options)7 Map (java.util.Map)6 Variable (com.vaticle.typedb.core.pattern.variable.Variable)5 TypeQLMatch (com.vaticle.typeql.lang.query.TypeQLMatch)4 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)3 CorrectnessVerifier (com.vaticle.typedb.core.test.behaviour.reasoner.verification.CorrectnessVerifier)3 ThingVariable (com.vaticle.typeql.lang.pattern.variable.ThingVariable)3