Search in sources :

Example 1 with AttributeType

use of com.vaticle.typedb.core.concept.type.AttributeType in project grakn by graknlabs.

the class ReasonerTest method test_relation_rule.

@Test
public void test_relation_rule() {
    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 person = conceptMgr.putEntityType("person");
            AttributeType name = conceptMgr.putAttributeType("name", AttributeType.ValueType.STRING);
            person.setOwns(name);
            RelationType friendship = conceptMgr.putRelationType("friendship");
            friendship.setRelates("friend");
            RelationType marriage = conceptMgr.putRelationType("marriage");
            marriage.setRelates("husband");
            marriage.setRelates("wife");
            person.setPlays(friendship.getRelates("friend"));
            person.setPlays(marriage.getRelates("husband"));
            person.setPlays(marriage.getRelates("wife"));
            logicMgr.putRule("marriage-is-friendship", TypeQL.parsePattern("{ $x isa person; $y isa person; (husband: $x, wife: $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 = singleThreadElgTransaction(session, Arguments.Transaction.Type.WRITE)) {
            txn.query().insert(TypeQL.parseQuery("insert $x isa person, has name 'Zack'; $y isa person, has name 'Yasmin'; (husband: $x, wife: $y) isa marriage;").asInsert());
            txn.commit();
        }
        try (CoreTransaction txn = singleThreadElgTransaction(session, Arguments.Transaction.Type.READ)) {
            List<ConceptMap> ans = txn.query().match(TypeQL.parseQuery("match $f (friend: $p1, friend: $p2) isa friendship; $p1 has name $na;").asMatch()).toList();
            ans.iterator().forEachRemaining(a -> {
                assertEquals("friendship", a.get("f").asThing().getType().getLabel().scopedName());
                assertEquals("person", a.get("p1").asThing().getType().getLabel().scopedName());
                assertEquals("person", a.get("p2").asThing().getType().getLabel().scopedName());
                assertEquals("name", a.get("na").asAttribute().getType().getLabel().scopedName());
            });
            assertEquals(2, ans.size());
        }
    }
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) EntityType(com.vaticle.typedb.core.concept.type.EntityType) LogicManager(com.vaticle.typedb.core.logic.LogicManager) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) RelationType(com.vaticle.typedb.core.concept.type.RelationType) CoreSession(com.vaticle.typedb.core.database.CoreSession) ConceptMap(com.vaticle.typedb.core.concept.answer.ConceptMap) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Example 2 with AttributeType

use of com.vaticle.typedb.core.concept.type.AttributeType in project grakn by graknlabs.

the class Definer method defineOwns.

private void defineOwns(ThingType thingType, Set<OwnsConstraint> ownsConstraints) {
    try (ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "define_owns")) {
        ownsConstraints.forEach(owns -> {
            AttributeType attributeType = define(owns.attribute()).asAttributeType();
            if (owns.overridden().isPresent()) {
                AttributeType overriddenType = define(owns.overridden().get()).asAttributeType();
                thingType.setOwns(attributeType, overriddenType, owns.isKey());
            } else {
                thingType.setOwns(attributeType, owns.isKey());
            }
        });
    }
}
Also used : AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) ThreadTrace(com.vaticle.factory.tracing.client.FactoryTracingThreadStatic.ThreadTrace)

Example 3 with AttributeType

use of com.vaticle.typedb.core.concept.type.AttributeType in project grakn by graknlabs.

the class BasicTest method assert_transaction_read.

private static void assert_transaction_read(TypeDB.Transaction transaction) {
    assertTrue(transaction.isOpen());
    assertTrue(transaction.type().isRead());
    ThingType rootType = transaction.concepts().getRootThingType();
    EntityType rootEntityType = transaction.concepts().getRootEntityType();
    RelationType rootRelationType = transaction.concepts().getRootRelationType();
    AttributeType rootAttributeType = transaction.concepts().getRootAttributeType();
    Util.assertNotNulls(rootType, rootEntityType, rootRelationType, rootAttributeType);
    Stream<Consumer<TypeDB.Transaction>> typeAssertions = Stream.of(tx -> {
        AttributeType.String name = tx.concepts().getAttributeType("name").asString();
        Util.assertNotNulls(name);
        assertEquals(rootAttributeType, name.getSupertype());
    }, tx -> {
        AttributeType.Long age = tx.concepts().getAttributeType("age").asLong();
        Util.assertNotNulls(age);
        assertEquals(rootAttributeType, age.getSupertype());
    }, tx -> {
        RelationType marriage = tx.concepts().getRelationType("marriage");
        RoleType husband = marriage.getRelates("husband");
        RoleType wife = marriage.getRelates("wife");
        Util.assertNotNulls(marriage, husband, wife);
        assertEquals(rootRelationType, marriage.getSupertype());
        assertEquals(rootRelationType.getRelates("role"), husband.getSupertype());
        assertEquals(rootRelationType.getRelates("role"), wife.getSupertype());
    }, tx -> {
        RelationType employment = tx.concepts().getRelationType("employment");
        RoleType employee = employment.getRelates("employee");
        RoleType employer = employment.getRelates("employer");
        Util.assertNotNulls(employment, employee, employer);
        assertEquals(rootRelationType, employment.getSupertype());
    }, tx -> {
        EntityType person = tx.concepts().getEntityType("person");
        Util.assertNotNulls(person);
        assertEquals(rootEntityType, person.getSupertype());
        Stream<Consumer<TypeDB.Transaction>> subPersonAssertions = Stream.of(tx2 -> {
            EntityType man = tx2.concepts().getEntityType("man");
            Util.assertNotNulls(man);
            assertEquals(person, man.getSupertype());
        }, tx2 -> {
            EntityType woman = tx2.concepts().getEntityType("woman");
            Util.assertNotNulls(woman);
            assertEquals(person, woman.getSupertype());
        });
        subPersonAssertions.parallel().forEach(assertions -> assertions.accept(tx));
    }, tx -> {
        EntityType company = tx.concepts().getEntityType("company");
        Util.assertNotNulls(company);
        assertEquals(rootEntityType, company.getSupertype());
    });
    typeAssertions.parallel().forEach(assertion -> assertion.accept(transaction));
}
Also used : EntityType(com.vaticle.typedb.core.concept.type.EntityType) Consumer(java.util.function.Consumer) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) RoleType(com.vaticle.typedb.core.concept.type.RoleType) RelationType(com.vaticle.typedb.core.concept.type.RelationType) TypeDB(com.vaticle.typedb.core.TypeDB) ThingType(com.vaticle.typedb.core.concept.type.ThingType)

Example 4 with AttributeType

use of com.vaticle.typedb.core.concept.type.AttributeType in project grakn by graknlabs.

the class BasicTest method write_and_retrieve_attribute_ownership_rule.

@Test
public void write_and_retrieve_attribute_ownership_rule() throws IOException {
    Util.resetDirectory(dataDir);
    try (TypeDB.DatabaseManager typedb = CoreDatabaseManager.open(options)) {
        typedb.create(database);
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.SCHEMA)) {
            try (TypeDB.Transaction txn = session.transaction(Arguments.Transaction.Type.WRITE)) {
                ConceptManager conceptMgr = txn.concepts();
                LogicManager logicMgr = txn.logic();
                AttributeType name = conceptMgr.putAttributeType("name", STRING);
                EntityType person = conceptMgr.putEntityType("person");
                RelationType friendship = conceptMgr.putRelationType("friendship");
                friendship.setRelates("friend");
                person.setPlays(friendship.getRelates("friend"));
                person.setOwns(name);
                logicMgr.putRule("people-have-names", TypeQL.parsePattern("{$x isa person; }").asConjunction(), TypeQL.parseVariable("$x has name \"i have a name\"").asThing());
                txn.commit();
            }
            try (TypeDB.Transaction txn = session.transaction(Arguments.Transaction.Type.READ)) {
                ConceptManager conceptMgr = txn.concepts();
                LogicManager logicMgr = txn.logic();
                Rule rule = logicMgr.getRule("people-have-names");
                Pattern when = rule.getWhenPreNormalised();
                ThingVariable<?> then = rule.getThenPreNormalised();
                assertEquals(TypeQL.parsePattern("{$x isa person;}"), when);
                assertEquals(TypeQL.parseVariable("$x has name \"i have a name\""), then);
            }
        }
    }
}
Also used : ConceptManager(com.vaticle.typedb.core.concept.ConceptManager) EntityType(com.vaticle.typedb.core.concept.type.EntityType) Pattern(com.vaticle.typeql.lang.pattern.Pattern) LogicManager(com.vaticle.typedb.core.logic.LogicManager) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) RelationType(com.vaticle.typedb.core.concept.type.RelationType) Rule(com.vaticle.typedb.core.logic.Rule) TypeDB(com.vaticle.typedb.core.TypeDB) Test(org.junit.Test)

Example 5 with AttributeType

use of com.vaticle.typedb.core.concept.type.AttributeType in project grakn by graknlabs.

the class BasicTest method write_types_concurrently.

@Test
public void write_types_concurrently() throws IOException, InterruptedException {
    Util.resetDirectory(dataDir);
    try (TypeDB.DatabaseManager typedb = CoreDatabaseManager.open(options)) {
        typedb.create(database);
        assertTrue(typedb.isOpen());
        assertEquals(1, typedb.all().size());
        assertEquals(database, typedb.all().iterator().next().name());
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.SCHEMA)) {
            assertTrue(session.isOpen());
            assertEquals(database, session.database().name());
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.READ)) {
                assertTrue(transaction.isOpen());
                assertTrue(transaction.type().isRead());
                Stream<Consumer<TypeDB.Transaction>> rootTypeAssertions = Stream.of(tx -> {
                    ThingType rootType = tx.concepts().getRootThingType();
                    assertNotNull(rootType);
                }, tx -> {
                    EntityType rootEntityType = tx.concepts().getRootEntityType();
                    assertNotNull(rootEntityType);
                }, tx -> {
                    RelationType rootRelationType = tx.concepts().getRootRelationType();
                    assertNotNull(rootRelationType);
                }, tx -> {
                    AttributeType rootAttributeType = tx.concepts().getRootAttributeType();
                    assertNotNull(rootAttributeType);
                });
                rootTypeAssertions.parallel().forEach(assertion -> assertion.accept(transaction));
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                assertTrue(transaction.isOpen());
                assertTrue(transaction.type().isWrite());
                ThingType rootType = transaction.concepts().getRootThingType();
                EntityType rootEntityType = transaction.concepts().getRootEntityType();
                RelationType rootRelationType = transaction.concepts().getRootRelationType();
                AttributeType rootAttributeType = transaction.concepts().getRootAttributeType();
                Util.assertNotNulls(rootType, rootEntityType, rootRelationType, rootAttributeType);
                Stream<Consumer<TypeDB.Transaction>> typeAssertions = Stream.of(tx -> {
                    AttributeType name = tx.concepts().putAttributeType("name", STRING).asString();
                    Util.assertNotNulls(name);
                    assertEquals(rootAttributeType, name.getSupertype());
                }, tx -> {
                    AttributeType.Long age = tx.concepts().putAttributeType("age", LONG).asLong();
                    Util.assertNotNulls(age);
                    assertEquals(rootAttributeType, age.getSupertype());
                }, tx -> {
                    RelationType marriage = tx.concepts().putRelationType("marriage");
                    marriage.setRelates("husband");
                    marriage.setRelates("wife");
                    Util.assertNotNulls(marriage);
                    assertEquals(rootRelationType, marriage.getSupertype());
                }, tx -> {
                    RelationType employment = tx.concepts().putRelationType("employment");
                    employment.setRelates("employee");
                    employment.setRelates("employer");
                    Util.assertNotNulls(employment);
                    assertEquals(rootRelationType, employment.getSupertype());
                }, tx -> {
                    EntityType person = tx.concepts().putEntityType("person");
                    Util.assertNotNulls(person);
                    assertEquals(rootEntityType, person.getSupertype());
                    Stream<Consumer<TypeDB.Transaction>> subPersonAssertions = Stream.of(tx2 -> {
                        EntityType man = tx2.concepts().putEntityType("man");
                        man.setSupertype(person);
                        Util.assertNotNulls(man);
                        assertEquals(person, man.getSupertype());
                    }, tx2 -> {
                        EntityType woman = tx2.concepts().putEntityType("woman");
                        woman.setSupertype(person);
                        Util.assertNotNulls(woman);
                        assertEquals(person, woman.getSupertype());
                    });
                    subPersonAssertions.parallel().forEach(assertions -> assertions.accept(tx));
                }, tx -> {
                    EntityType company = tx.concepts().putEntityType("company");
                    Util.assertNotNulls(company);
                    assertEquals(rootEntityType, company.getSupertype());
                });
                typeAssertions.parallel().forEach(assertion -> assertion.accept(transaction));
                transaction.commit();
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.READ)) {
                assert_transaction_read(transaction);
            }
        }
    }
    try (TypeDB.DatabaseManager typedb = CoreDatabaseManager.open(options)) {
        assertTrue(typedb.isOpen());
        assertEquals(1, typedb.all().size());
        assertEquals(database, typedb.all().iterator().next().name());
        try (TypeDB.Session session = typedb.session(database, Arguments.Session.Type.SCHEMA)) {
            assertTrue(session.isOpen());
            assertEquals(database, session.database().name());
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.READ)) {
                assert_transaction_read(transaction);
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.WRITE)) {
                AttributeType.String gender = transaction.concepts().putAttributeType("gender", STRING).asString();
                EntityType school = transaction.concepts().putEntityType("school");
                RelationType teaching = transaction.concepts().putRelationType("teaching");
                teaching.setRelates("teacher");
                teaching.setRelates("student");
                RoleType teacher = teaching.getRelates("teacher");
                RoleType student = teaching.getRelates("student");
                Util.assertNotNulls(gender, school, teaching, teacher, student);
                transaction.commit();
            }
            try (TypeDB.Transaction transaction = session.transaction(Arguments.Transaction.Type.READ)) {
                assert_transaction_read(transaction);
                AttributeType.String gender = transaction.concepts().getAttributeType("gender").asString();
                EntityType school = transaction.concepts().getEntityType("school");
                RelationType teaching = transaction.concepts().getRelationType("teaching");
                RoleType teacher = teaching.getRelates("teacher");
                RoleType student = teaching.getRelates("student");
                Util.assertNotNulls(gender, school, teaching, teacher, student);
            }
        }
    }
}
Also used : RoleType(com.vaticle.typedb.core.concept.type.RoleType) TypeDB(com.vaticle.typedb.core.TypeDB) ThingType(com.vaticle.typedb.core.concept.type.ThingType) EntityType(com.vaticle.typedb.core.concept.type.EntityType) Consumer(java.util.function.Consumer) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) RelationType(com.vaticle.typedb.core.concept.type.RelationType) Test(org.junit.Test)

Aggregations

AttributeType (com.vaticle.typedb.core.concept.type.AttributeType)53 EntityType (com.vaticle.typedb.core.concept.type.EntityType)27 Test (org.junit.Test)24 ConceptManager (com.vaticle.typedb.core.concept.ConceptManager)21 CoreSession (com.vaticle.typedb.core.database.CoreSession)20 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)20 RelationType (com.vaticle.typedb.core.concept.type.RelationType)16 Then (io.cucumber.java.en.Then)16 ConceptMap (com.vaticle.typedb.core.concept.answer.ConceptMap)13 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)11 ThingType (com.vaticle.typedb.core.concept.type.ThingType)10 LogicManager (com.vaticle.typedb.core.logic.LogicManager)9 When (io.cucumber.java.en.When)7 TypeDB (com.vaticle.typedb.core.TypeDB)4 Options (com.vaticle.typedb.core.common.parameters.Options)4 Attribute (com.vaticle.typedb.core.concept.thing.Attribute)4 RoleType (com.vaticle.typedb.core.concept.type.RoleType)4 Conjunction (com.vaticle.typedb.core.pattern.Conjunction)3 Variable (com.vaticle.typedb.core.pattern.variable.Variable)3 ThingVariable (com.vaticle.typeql.lang.pattern.variable.ThingVariable)3