Search in sources :

Example 6 with CoreTransaction

use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.

the class RuleTest method rule_relation_materialises_when_missing.

@Test
public void rule_relation_materialises_when_missing() 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)) {
                ConceptManager conceptMgr = txn.concepts();
                LogicManager logicMgr = txn.logic();
                EntityType person = conceptMgr.putEntityType("person");
                RelationType friendship = conceptMgr.putRelationType("friendship");
                friendship.setRelates("friend");
                RelationType marriage = conceptMgr.putRelationType("marriage");
                marriage.setRelates("spouse");
                person.setPlays(friendship.getRelates("friend"));
                person.setPlays(marriage.getRelates("spouse"));
                logicMgr.putRule("marriage-is-friendship", TypeQL.parsePattern("{ $x isa person; $y isa person; (spouse: $x, spouse: $y) isa marriage; }").asConjunction(), TypeQL.parseVariable("(friend: $x, friend: $y) isa friendship").asThing());
                txn.commit();
            }
        }
        try (CoreSession session = databaseMgr.session(database, Arguments.Session.Type.DATA)) {
            try (CoreTransaction txn = session.transaction(Arguments.Transaction.Type.WRITE)) {
                ConceptManager conceptMgr = txn.concepts();
                txn.query().insert(TypeQL.parseQuery("insert $x isa person; $y isa person; (spouse: $x, spouse: $y) isa marriage;").asInsert());
                EntityType person = conceptMgr.getEntityType("person");
                List<? extends Entity> people = person.getInstances().toList();
                assertEquals(2, people.size());
                Rule rule = txn.logic().getRule("marriage-is-friendship");
                ConceptMap whenAnswer = new ConceptMap(map(pair(Identifier.Variable.name("x"), people.get(0)), pair(Identifier.Variable.name("y"), people.get(1))));
                List<Map<Identifier.Variable, Concept>> materialisations = rule.conclusion().materialise(whenAnswer, txn.traversal(), conceptMgr).toList();
                assertEquals(1, materialisations.size());
                assertEquals(5, materialisations.get(0).size());
                RelationType friendship = conceptMgr.getRelationType("friendship");
                List<? extends Relation> friendshipInstances = friendship.getInstances().toList();
                assertEquals(1, friendshipInstances.size());
                assertEquals(set(people.get(0), people.get(1)), friendshipInstances.get(0).getPlayers().toSet());
            }
        }
    }
}
Also used : CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) EntityType(com.vaticle.typedb.core.concept.type.EntityType) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Identifier(com.vaticle.typedb.core.traversal.common.Identifier) RelationType(com.vaticle.typedb.core.concept.type.RelationType) CoreSession(com.vaticle.typedb.core.database.CoreSession) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Map(java.util.Map) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) Test(org.junit.Test)

Example 7 with CoreTransaction

use of com.vaticle.typedb.core.database.CoreTransaction 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 8 with CoreTransaction

use of com.vaticle.typedb.core.database.CoreTransaction 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 9 with CoreTransaction

use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.

the class UnifyAttributeConcludableTest method setUp.

@BeforeClass
public static void setUp() throws IOException {
    Util.resetDirectory(dataDir);
    databaseMgr = CoreDatabaseManager.open(options);
    databaseMgr.create(database);
    session = databaseMgr.session(database, Arguments.Session.Type.SCHEMA);
    try (CoreTransaction tx = session.transaction(Arguments.Transaction.Type.WRITE)) {
        tx.query().define(TypeQL.parseQuery("define " + "person sub entity," + "    owns first-name," + "    owns last-name," + "    owns age," + "    plays employment:employee;" + "company sub entity," + "    plays employment:employer;" + "employment sub relation," + "    relates employee," + "    relates employer;" + "name sub attribute, value string, abstract;" + "first-name sub name;" + "last-name sub name;" + "age sub attribute, value long;" + "").asDefine());
        tx.commit();
    }
}
Also used : CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) BeforeClass(org.junit.BeforeClass)

Example 10 with CoreTransaction

use of com.vaticle.typedb.core.database.CoreTransaction in project grakn by graknlabs.

the class ResolutionTest method singleThreadElgTransaction.

private CoreTransaction singleThreadElgTransaction(CoreSession session) {
    CoreTransaction transaction = session.transaction(Arguments.Transaction.Type.WRITE);
    ActorExecutorGroup service = new ActorExecutorGroup(1, new NamedThreadFactory("typedb-actor"));
    transaction.reasoner().resolverRegistry().setExecutorService(service);
    return transaction;
}
Also used : NamedThreadFactory(com.vaticle.typedb.common.concurrent.NamedThreadFactory) ActorExecutorGroup(com.vaticle.typedb.core.concurrent.actor.ActorExecutorGroup) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction)

Aggregations

CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)56 CoreSession (com.vaticle.typedb.core.database.CoreSession)46 Test (org.junit.Test)45 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)22 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)20 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)19 Conjunction (com.vaticle.typedb.core.pattern.Conjunction)16 RelationType (com.vaticle.typedb.core.concept.type.RelationType)13 Util.resolvedConjunction (com.vaticle.typedb.core.reasoner.resolution.Util.resolvedConjunction)12 Identifier (com.vaticle.typedb.core.traversal.common.Identifier)12 LogicManager (com.vaticle.typedb.core.logic.LogicManager)10 Options (com.vaticle.typedb.core.common.parameters.Options)9 NamedThreadFactory (com.vaticle.typedb.common.concurrent.NamedThreadFactory)8 ActorExecutorGroup (com.vaticle.typedb.core.concurrent.actor.ActorExecutorGroup)8 Variable (com.vaticle.typedb.core.pattern.variable.Variable)7 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)6 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)6 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)6