Search in sources :

Example 1 with ROLE

use of com.vaticle.typedb.core.graph.common.Encoding.Vertex.Thing.ROLE in project grakn by graknlabs.

the class EncodingTest method encoded_keys_are_correct.

@Test
public void encoded_keys_are_correct() {
    try (CoreTransaction transaction = session.transaction(WRITE)) {
        Storage.Data storage = transaction.traversal().graph().data().storage();
        assertEquals(0, vertexElements(storage).size());
        assertEquals(0, variableStartEdgeElements(storage).size());
        assertEquals(0, fixedStartEdgeElements(storage).size());
        assertEquals(0, optimisationEdgeElements(storage).size());
        transaction.query().insert(TypeQL.parseQuery("insert " + "$p isa person, has name 'Alice';" + "$c isa company, has company-id 10;" + "(employer: $c, employee: $p) isa employment;").asInsert());
        transaction.commit();
    }
    try (CoreTransaction transaction = session.transaction(WRITE)) {
        GraphManager graph = transaction.traversal().graph();
        Storage.Data storage = graph.data().storage();
        List<KeyValue<RawKey, ByteArray>> vertexKVs = vertexElements(storage);
        assertTrue(iterate(vertexKVs).allMatch(kv -> kv.value().isEmpty()));
        List<ByteArray> vertices = iterate(vertexKVs).map(kv -> kv.key().bytes()).toList();
        // we must have exactly the expected set of vertex bytes
        assertEquals(7, vertices.size());
        ByteArray personIID = expectedIID(graph, Label.of("person"), 0);
        assertTrue(vertices.contains(personIID));
        ByteArray companyIID = expectedIID(graph, Label.of("company"), 0);
        assertTrue(vertices.contains(companyIID));
        ByteArray employmentIID = expectedIID(graph, Label.of("employment"), 0);
        assertTrue(vertices.contains(employmentIID));
        ByteArray employeeRoleIID = expectedIID(graph, Label.of("employee", "employment"), 0);
        assertTrue(vertices.contains(employeeRoleIID));
        ByteArray employerRoleIID = expectedIID(graph, Label.of("employer", "employment"), 0);
        assertTrue(vertices.contains(employerRoleIID));
        ByteArray nameAliceIID = expectedAttributeIID(graph, Label.of("name"), "Alice");
        assertTrue(vertices.contains(nameAliceIID));
        ByteArray companyId10IID = expectedAttributeIID(graph, Label.of("company-id"), 10);
        assertTrue(vertices.contains(companyId10IID));
        // we must have exactly the right set of fixed length edges: relates, plays, and forward has
        List<KeyValue<RawKey, ByteArray>> fixedKVs = fixedStartEdgeElements(storage);
        assertTrue(iterate(fixedKVs).allMatch(kv -> kv.value().isEmpty()));
        List<ByteArray> fixed = iterate(fixedKVs).map(kv -> kv.key().bytes()).toList();
        assertEquals(10, fixed.size());
        assertTrue(fixed.contains(join(personIID, HAS.forward().bytes(), nameAliceIID)));
        assertTrue(fixed.contains(join(personIID, PLAYING.forward().bytes(), employeeRoleIID)));
        assertTrue(fixed.contains(join(employeeRoleIID, PLAYING.backward().bytes(), personIID)));
        assertTrue(fixed.contains(join(employeeRoleIID, RELATING.backward().bytes(), employmentIID)));
        assertTrue(fixed.contains(join(employmentIID, RELATING.forward().bytes(), employeeRoleIID)));
        assertTrue(fixed.contains(join(employmentIID, RELATING.forward().bytes(), employerRoleIID)));
        assertTrue(fixed.contains(join(employerRoleIID, RELATING.backward().bytes(), employmentIID)));
        assertTrue(fixed.contains(join(employerRoleIID, PLAYING.backward().bytes(), companyIID)));
        assertTrue(fixed.contains(join(companyIID, PLAYING.forward().bytes(), employerRoleIID)));
        assertTrue(fixed.contains(join(companyIID, HAS.forward().bytes(), companyId10IID)));
        // we must have exactly the right set of variable length edges: backward has
        List<KeyValue<RawKey, ByteArray>> variableKVs = variableStartEdgeElements(storage);
        assertTrue(iterate(variableKVs).allMatch(kv -> kv.value().isEmpty()));
        List<ByteArray> variable = iterate(variableKVs).map(kv -> kv.key().bytes()).toList();
        assertEquals(2, variable.size());
        assertTrue(variable.contains(join(nameAliceIID, HAS.backward().bytes(), personIID)));
        assertTrue(variable.contains(join(companyId10IID, HAS.backward().bytes(), companyIID)));
        // we must have exactly the right set of optimisation edges: role player
        List<KeyValue<RawKey, ByteArray>> optimisationKVs = optimisationEdgeElements(storage);
        assertTrue(iterate(optimisationKVs).allMatch(kv -> kv.value().isEmpty()));
        List<ByteArray> optimisation = iterate(optimisationKVs).map(kv -> kv.key().bytes()).toList();
        assertEquals(4, optimisation.size());
        TypeVertex employerRoleType = graph.schema().getType(Label.of("employer", "employment"));
        TypeVertex employeeRoleType = graph.schema().getType(Label.of("employee", "employment"));
        assertTrue(optimisation.contains(join(personIID, ROLEPLAYER.backward().bytes(), employeeRoleType.iid().bytes(), employmentIID, employeeRoleIID.view(1 + employeeRoleType.iid().bytes().length()))));
        assertTrue(optimisation.contains(join(employmentIID, ROLEPLAYER.forward().bytes(), employeeRoleType.iid().bytes(), personIID, employeeRoleIID.view(1 + employeeRoleType.iid().bytes().length()))));
        assertTrue(optimisation.contains(join(companyIID, ROLEPLAYER.backward().bytes(), employerRoleType.iid().bytes(), employmentIID, employerRoleIID.view(1 + employerRoleType.iid().bytes().length()))));
        assertTrue(optimisation.contains(join(employmentIID, ROLEPLAYER.forward().bytes(), employerRoleType.iid().bytes(), companyIID, employerRoleIID.view(1 + employerRoleType.iid().bytes().length()))));
    }
}
Also used : Factory(com.vaticle.typedb.core.database.Factory) MB(com.vaticle.typedb.core.common.collection.Bytes.MB) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) ByteArray.encodeLong(com.vaticle.typedb.core.common.collection.ByteArray.encodeLong) VERTEX_ROLE(com.vaticle.typedb.core.graph.common.Encoding.Prefix.VERTEX_ROLE) After(org.junit.After) CoreFactory(com.vaticle.typedb.core.database.CoreFactory) ByteArray.join(com.vaticle.typedb.core.common.collection.ByteArray.join) ByteArray(com.vaticle.typedb.core.common.collection.ByteArray) Path(java.nio.file.Path) VERTEX_ENTITY(com.vaticle.typedb.core.graph.common.Encoding.Prefix.VERTEX_ENTITY) TypeQL(com.vaticle.typeql.lang.TypeQL) AfterClass(org.junit.AfterClass) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Options(com.vaticle.typedb.core.common.parameters.Options) ROLE(com.vaticle.typedb.core.graph.common.Encoding.Vertex.Thing.ROLE) ENTITY(com.vaticle.typedb.core.graph.common.Encoding.Vertex.Thing.ENTITY) RELATING(com.vaticle.typedb.core.graph.common.Encoding.Edge.Thing.Base.RELATING) TypeDB(com.vaticle.typedb.core.TypeDB) List(java.util.List) PLAYING(com.vaticle.typedb.core.graph.common.Encoding.Edge.Thing.Base.PLAYING) TypeDBException(com.vaticle.typedb.core.common.exception.TypeDBException) TypeDBCheckedException(com.vaticle.typedb.core.common.exception.TypeDBCheckedException) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) RELATION(com.vaticle.typedb.core.graph.common.Encoding.Vertex.Thing.RELATION) ByteArray.encodeLongAsSorted(com.vaticle.typedb.core.common.collection.ByteArray.encodeLongAsSorted) BeforeClass(org.junit.BeforeClass) KeyValue(com.vaticle.typedb.core.common.collection.KeyValue) Collections.set(com.vaticle.typedb.common.collection.Collections.set) STRING_ENCODING(com.vaticle.typedb.core.graph.common.Encoding.ValueType.STRING_ENCODING) WRITE(com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE) ByteArray.encodeStringAsSorted(com.vaticle.typedb.core.common.collection.ByteArray.encodeStringAsSorted) Storage(com.vaticle.typedb.core.graph.common.Storage) Label(com.vaticle.typedb.core.common.parameters.Label) Encoding(com.vaticle.typedb.core.graph.common.Encoding) Before(org.junit.Before) ILLEGAL_ARGUMENT(com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_ARGUMENT) HAS(com.vaticle.typedb.core.graph.common.Encoding.Edge.Thing.Base.HAS) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) IOException(java.io.IOException) CoreSession(com.vaticle.typedb.core.database.CoreSession) VERTEX_RELATION(com.vaticle.typedb.core.graph.common.Encoding.Prefix.VERTEX_RELATION) Paths(java.nio.file.Paths) ROLEPLAYER(com.vaticle.typedb.core.graph.common.Encoding.Edge.Thing.Optimised.ROLEPLAYER) Iterators.iterate(com.vaticle.typedb.core.common.iterator.Iterators.iterate) VERTEX_ATTRIBUTE(com.vaticle.typedb.core.graph.common.Encoding.Prefix.VERTEX_ATTRIBUTE) TypeVertex(com.vaticle.typedb.core.graph.vertex.TypeVertex) ATTRIBUTE(com.vaticle.typedb.core.graph.common.Encoding.Vertex.Thing.ATTRIBUTE) Assert.assertEquals(org.junit.Assert.assertEquals) Util(com.vaticle.typedb.core.test.integration.util.Util) Storage(com.vaticle.typedb.core.graph.common.Storage) KeyValue(com.vaticle.typedb.core.common.collection.KeyValue) ByteArray(com.vaticle.typedb.core.common.collection.ByteArray) TypeVertex(com.vaticle.typedb.core.graph.vertex.TypeVertex) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Test(org.junit.Test)

Aggregations

Collections.set (com.vaticle.typedb.common.collection.Collections.set)1 TypeDB (com.vaticle.typedb.core.TypeDB)1 ByteArray (com.vaticle.typedb.core.common.collection.ByteArray)1 ByteArray.encodeLong (com.vaticle.typedb.core.common.collection.ByteArray.encodeLong)1 ByteArray.encodeLongAsSorted (com.vaticle.typedb.core.common.collection.ByteArray.encodeLongAsSorted)1 ByteArray.encodeStringAsSorted (com.vaticle.typedb.core.common.collection.ByteArray.encodeStringAsSorted)1 ByteArray.join (com.vaticle.typedb.core.common.collection.ByteArray.join)1 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)1 KeyValue (com.vaticle.typedb.core.common.collection.KeyValue)1 ILLEGAL_ARGUMENT (com.vaticle.typedb.core.common.exception.ErrorMessage.Internal.ILLEGAL_ARGUMENT)1 TypeDBCheckedException (com.vaticle.typedb.core.common.exception.TypeDBCheckedException)1 TypeDBException (com.vaticle.typedb.core.common.exception.TypeDBException)1 Iterators.iterate (com.vaticle.typedb.core.common.iterator.Iterators.iterate)1 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)1 WRITE (com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE)1 Label (com.vaticle.typedb.core.common.parameters.Label)1 Options (com.vaticle.typedb.core.common.parameters.Options)1 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)1 CoreFactory (com.vaticle.typedb.core.database.CoreFactory)1 CoreSession (com.vaticle.typedb.core.database.CoreSession)1