Search in sources :

Example 1 with WRITE

use of com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE in project grakn by graknlabs.

the class RocksIteratorTest method attributesRetrievedAscending.

@Test
public void attributesRetrievedAscending() {
    List<String> strings = new ArrayList<>();
    for (int i = 0; i < 10_000; i++) {
        strings.add(UUID.randomUUID().toString());
    }
    try (TypeDB.Transaction transaction = session.transaction(WRITE)) {
        AttributeType.String stringValueType = transaction.concepts().getAttributeType("string-value").asString();
        for (String string : strings) {
            stringValueType.put(string);
        }
        transaction.commit();
    }
    // test ascending order
    strings.sort(Comparator.naturalOrder());
    try (CoreTransaction transaction = session.transaction(READ)) {
        Storage.Data storage = transaction.graphMgr.data().storage();
        AttributeType.String stringValueType = transaction.concepts().getAttributeType("string-value").asString();
        VertexIID.Type iid = ((AttributeTypeImpl) stringValueType).vertex.iid();
        Storage.Key.Prefix<VertexIID.Thing> iteratePrefix = VertexIID.Thing.Attribute.String.prefix(iid);
        List<String> values = storage.iterate(iteratePrefix, ASC).map(kv -> kv.key().asAttribute().asString().value()).toList();
        assertEquals(strings, values);
    }
    // test descending order
    strings.sort(Comparator.reverseOrder());
    try (CoreTransaction transaction = session.transaction(READ)) {
        Storage.Data storage = transaction.graphMgr.data().storage();
        AttributeType.String stringValueType = transaction.concepts().getAttributeType("string-value").asString();
        VertexIID.Type iid = ((AttributeTypeImpl) stringValueType).vertex.iid();
        Storage.Key.Prefix<VertexIID.Thing> iteratePrefix = VertexIID.Thing.Attribute.String.prefix(iid);
        List<String> values = storage.iterate(iteratePrefix, DESC).map(kv -> kv.key().asAttribute().asString().value()).toList();
        assertEquals(strings, values);
    }
}
Also used : BeforeClass(org.junit.BeforeClass) WRITE(com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE) Factory(com.vaticle.typedb.core.database.Factory) MB(com.vaticle.typedb.core.common.collection.Bytes.MB) ASC(com.vaticle.typedb.core.common.iterator.sorted.SortedIterator.ASC) DESC(com.vaticle.typedb.core.common.iterator.sorted.SortedIterator.DESC) Arguments(com.vaticle.typedb.core.common.parameters.Arguments) ArrayList(java.util.ArrayList) Storage(com.vaticle.typedb.core.graph.common.Storage) AttributeTypeImpl(com.vaticle.typedb.core.concept.type.impl.AttributeTypeImpl) VertexIID(com.vaticle.typedb.core.graph.iid.VertexIID) READ(com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.READ) After(org.junit.After) CoreFactory(com.vaticle.typedb.core.database.CoreFactory) Path(java.nio.file.Path) Before(org.junit.Before) AfterClass(org.junit.AfterClass) CoreDatabaseManager(com.vaticle.typedb.core.database.CoreDatabaseManager) Options(com.vaticle.typedb.core.common.parameters.Options) Test(org.junit.Test) IOException(java.io.IOException) UUID(java.util.UUID) TypeDB(com.vaticle.typedb.core.TypeDB) CoreSession(com.vaticle.typedb.core.database.CoreSession) List(java.util.List) Paths(java.nio.file.Paths) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) Comparator(java.util.Comparator) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Assert.assertEquals(org.junit.Assert.assertEquals) Util(com.vaticle.typedb.core.test.integration.util.Util) ArrayList(java.util.ArrayList) TypeDB(com.vaticle.typedb.core.TypeDB) CoreTransaction(com.vaticle.typedb.core.database.CoreTransaction) Storage(com.vaticle.typedb.core.graph.common.Storage) VertexIID(com.vaticle.typedb.core.graph.iid.VertexIID) AttributeType(com.vaticle.typedb.core.concept.type.AttributeType) Test(org.junit.Test)

Example 2 with WRITE

use of com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE 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

TypeDB (com.vaticle.typedb.core.TypeDB)2 MB (com.vaticle.typedb.core.common.collection.Bytes.MB)2 Arguments (com.vaticle.typedb.core.common.parameters.Arguments)2 WRITE (com.vaticle.typedb.core.common.parameters.Arguments.Transaction.Type.WRITE)2 Options (com.vaticle.typedb.core.common.parameters.Options)2 CoreDatabaseManager (com.vaticle.typedb.core.database.CoreDatabaseManager)2 CoreFactory (com.vaticle.typedb.core.database.CoreFactory)2 CoreSession (com.vaticle.typedb.core.database.CoreSession)2 CoreTransaction (com.vaticle.typedb.core.database.CoreTransaction)2 Factory (com.vaticle.typedb.core.database.Factory)2 Storage (com.vaticle.typedb.core.graph.common.Storage)2 Util (com.vaticle.typedb.core.test.integration.util.Util)2 IOException (java.io.IOException)2 Path (java.nio.file.Path)2 Paths (java.nio.file.Paths)2 List (java.util.List)2 After (org.junit.After)2 AfterClass (org.junit.AfterClass)2 Assert.assertEquals (org.junit.Assert.assertEquals)2 Before (org.junit.Before)2