Search in sources :

Example 26 with RelationshipTraversalCursor

use of org.neo4j.internal.kernel.api.RelationshipTraversalCursor in project neo4j by neo4j.

the class KernelReadTracerTxStateTest method shouldTraceRelationshipTraversal.

@Test
void shouldTraceRelationshipTraversal() throws Exception {
    // given
    TestKernelReadTracer tracer = new TestKernelReadTracer();
    try (KernelTransaction tx = beginTransaction();
        NodeCursor nodeCursor = tx.cursors().allocateNodeCursor(tx.cursorContext());
        RelationshipTraversalCursor cursor = tx.cursors().allocateRelationshipTraversalCursor(tx.cursorContext())) {
        long n1 = tx.dataWrite().nodeCreate();
        long n2 = tx.dataWrite().nodeCreate();
        long r = tx.dataWrite().relationshipCreate(n1, tx.token().relationshipTypeGetOrCreateForName("R"), n2);
        // when
        cursor.setTracer(tracer);
        tx.dataRead().singleNode(n1, nodeCursor);
        assertTrue(nodeCursor.next());
        nodeCursor.relationships(cursor, ALL_RELATIONSHIPS);
        assertTrue(cursor.next());
        tracer.assertEvents(OnRelationship(r));
        assertFalse(cursor.next());
        tracer.assertEvents();
    }
}
Also used : RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 27 with RelationshipTraversalCursor

use of org.neo4j.internal.kernel.api.RelationshipTraversalCursor in project neo4j by neo4j.

the class CachingExpandIntoTest method shouldBeAbleToPreformAllCursorMethodsFromReused.

@Test
void shouldBeAbleToPreformAllCursorMethodsFromReused() throws KernelException {
    // given
    long start, end, r1, r2, r3;
    int t1, t2, t3;
    int prop;
    try (KernelTransaction tx = transaction()) {
        start = nodeWithDegree(tx, 43);
        end = nodeWithDegree(tx, 11);
        TokenWrite tokenWrite = tx.tokenWrite();
        t1 = tokenWrite.relationshipTypeGetOrCreateForName("R1");
        t2 = tokenWrite.relationshipTypeGetOrCreateForName("R2");
        t3 = tokenWrite.relationshipTypeGetOrCreateForName("R3");
        prop = tokenWrite.propertyKeyGetOrCreateForName("prop");
        Write write = tx.dataWrite();
        r1 = write.relationshipCreate(start, t1, end);
        r2 = write.relationshipCreate(start, t2, end);
        r3 = write.relationshipCreate(end, t3, start);
        write.relationshipSetProperty(r1, prop, stringValue("Relationship 1"));
        write.relationshipSetProperty(r2, prop, stringValue("Relationship 2"));
        write.relationshipSetProperty(r3, prop, stringValue("Relationship 3"));
        tx.commit();
    }
    try (KernelTransaction tx = transaction();
        NodeCursor nodes = tx.cursors().allocateNodeCursor(tx.cursorContext());
        RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(tx.cursorContext());
        PropertyCursor properties = tx.cursors().allocatePropertyCursor(tx.cursorContext(), tx.memoryTracker())) {
        int[] types = { t2, t3 };
        CachingExpandInto expandInto = new CachingExpandInto(tx.dataRead(), INCOMING, MEMORY_TRACKER);
        // Find r3 first time
        RelationshipTraversalCursor cursor = expandInto.connectingRelationships(nodes, traversal, start, types, end);
        assertTrue(cursor.next());
        assertThat(cursor.relationshipReference()).isEqualTo(r3);
        assertThat(cursor.sourceNodeReference()).isEqualTo(end);
        assertThat(cursor.targetNodeReference()).isEqualTo(start);
        assertThat(cursor.otherNodeReference()).isEqualTo(start);
        assertThat(cursor.type()).isEqualTo(t3);
        cursor.properties(properties);
        assertTrue(properties.next());
        assertThat(properties.propertyValue()).isEqualTo(stringValue("Relationship 3"));
        assertFalse(properties.next());
        assertFalse(cursor.next());
        // Find r3 second time
        cursor = expandInto.connectingRelationships(nodes, traversal, start, types, end);
        assertTrue(cursor.next());
        assertThat(cursor.relationshipReference()).isEqualTo(r3);
        assertThat(cursor.sourceNodeReference()).isEqualTo(end);
        assertThat(cursor.targetNodeReference()).isEqualTo(start);
        assertThat(cursor.otherNodeReference()).isEqualTo(start);
        assertThat(cursor.type()).isEqualTo(t3);
        cursor.properties(properties);
        assertTrue(properties.next());
        assertThat(properties.propertyValue()).isEqualTo(stringValue("Relationship 3"));
        assertFalse(properties.next());
        assertFalse(cursor.next());
        // Find r2 first time
        cursor = expandInto.connectingRelationships(nodes, traversal, end, types, start);
        assertTrue(cursor.next());
        assertThat(cursor.relationshipReference()).isEqualTo(r2);
        assertThat(cursor.sourceNodeReference()).isEqualTo(start);
        assertThat(cursor.targetNodeReference()).isEqualTo(end);
        assertThat(cursor.otherNodeReference()).isEqualTo(end);
        assertThat(cursor.type()).isEqualTo(t2);
        cursor.properties(properties);
        assertTrue(properties.next());
        assertThat(properties.propertyValue()).isEqualTo(stringValue("Relationship 2"));
        assertFalse(properties.next());
        assertFalse(cursor.next());
        // Find r2 second time
        cursor = expandInto.connectingRelationships(nodes, traversal, end, types, start);
        assertTrue(cursor.next());
        assertThat(cursor.relationshipReference()).isEqualTo(r2);
        assertThat(cursor.sourceNodeReference()).isEqualTo(start);
        assertThat(cursor.targetNodeReference()).isEqualTo(end);
        assertThat(cursor.otherNodeReference()).isEqualTo(end);
        assertThat(cursor.type()).isEqualTo(t2);
        cursor.properties(properties);
        assertTrue(properties.next());
        assertThat(properties.propertyValue()).isEqualTo(stringValue("Relationship 2"));
        assertFalse(properties.next());
        assertFalse(cursor.next());
    }
}
Also used : TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) PropertyCursor(org.neo4j.internal.kernel.api.PropertyCursor) Test(org.junit.jupiter.api.Test)

Example 28 with RelationshipTraversalCursor

use of org.neo4j.internal.kernel.api.RelationshipTraversalCursor in project neo4j by neo4j.

the class CachingExpandIntoTest method shouldBeAbleToReuseWithoutTypes.

@Test
void shouldBeAbleToReuseWithoutTypes() throws KernelException {
    // given
    long start, end, r1, r2, r3;
    int t1, t2, t3;
    try (KernelTransaction tx = transaction()) {
        start = nodeWithDegree(tx, 43);
        end = nodeWithDegree(tx, 11);
        TokenWrite tokenWrite = tx.tokenWrite();
        t1 = tokenWrite.relationshipTypeGetOrCreateForName("R1");
        t2 = tokenWrite.relationshipTypeGetOrCreateForName("R2");
        t3 = tokenWrite.relationshipTypeGetOrCreateForName("R3");
        Write write = tx.dataWrite();
        r1 = write.relationshipCreate(start, t1, end);
        r2 = write.relationshipCreate(start, t2, end);
        r3 = write.relationshipCreate(end, t3, start);
        tx.commit();
    }
    try (KernelTransaction tx = transaction();
        NodeCursor nodeCursor = tx.cursors().allocateNodeCursor(tx.cursorContext());
        RelationshipTraversalCursor traversalCursor = tx.cursors().allocateRelationshipTraversalCursor(tx.cursorContext())) {
        CachingExpandInto expandInto = new CachingExpandInto(tx.dataRead(), OUTGOING, MEMORY_TRACKER);
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, start, null, end))).isEqualTo(immutable.of(r1, r2));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, end, null, start))).isEqualTo(immutable.of(r3));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, start, null, end))).isEqualTo(immutable.of(r1, r2));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, end, null, start))).isEqualTo(immutable.of(r3));
    }
}
Also used : TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 29 with RelationshipTraversalCursor

use of org.neo4j.internal.kernel.api.RelationshipTraversalCursor in project neo4j by neo4j.

the class CachingExpandIntoTest method shouldBeAbleToReuseWithTypes.

@Test
void shouldBeAbleToReuseWithTypes() throws KernelException {
    // given
    long start, end, r1, r3;
    int t1, t2, t3;
    try (KernelTransaction tx = transaction()) {
        start = nodeWithDegree(tx, 43);
        end = nodeWithDegree(tx, 11);
        TokenWrite tokenWrite = tx.tokenWrite();
        t1 = tokenWrite.relationshipTypeGetOrCreateForName("R1");
        t2 = tokenWrite.relationshipTypeGetOrCreateForName("R2");
        t3 = tokenWrite.relationshipTypeGetOrCreateForName("R3");
        Write write = tx.dataWrite();
        r1 = write.relationshipCreate(start, t1, end);
        write.relationshipCreate(start, t2, end);
        r3 = write.relationshipCreate(end, t3, start);
        tx.commit();
    }
    try (KernelTransaction tx = transaction();
        NodeCursor nodeCursor = tx.cursors().allocateNodeCursor(tx.cursorContext());
        RelationshipTraversalCursor traversalCursor = tx.cursors().allocateRelationshipTraversalCursor(tx.cursorContext())) {
        int[] types = { t1, t3 };
        CachingExpandInto expandInto = new CachingExpandInto(tx.dataRead(), OUTGOING, MEMORY_TRACKER);
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, start, types, end))).isEqualTo(immutable.of(r1));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, end, types, start))).isEqualTo(immutable.of(r3));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, start, types, end))).isEqualTo(immutable.of(r1));
        assertThat(toSet(expandInto.connectingRelationships(nodeCursor, traversalCursor, end, types, start))).isEqualTo(immutable.of(r3));
    }
}
Also used : TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) TokenWrite(org.neo4j.internal.kernel.api.TokenWrite) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Aggregations

RelationshipTraversalCursor (org.neo4j.internal.kernel.api.RelationshipTraversalCursor)29 NodeCursor (org.neo4j.internal.kernel.api.NodeCursor)26 Test (org.junit.jupiter.api.Test)23 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)17 Write (org.neo4j.internal.kernel.api.Write)10 Read (org.neo4j.internal.kernel.api.Read)7 Degrees (org.neo4j.storageengine.api.Degrees)7 TokenWrite (org.neo4j.internal.kernel.api.TokenWrite)3 PropertyCursor (org.neo4j.internal.kernel.api.PropertyCursor)2 MutableLongSet (org.eclipse.collections.api.set.primitive.MutableLongSet)1 LongHashSet (org.eclipse.collections.impl.set.mutable.primitive.LongHashSet)1 SecurityContext (org.neo4j.internal.kernel.api.security.SecurityContext)1 TestAccessMode (org.neo4j.internal.kernel.api.security.TestAccessMode)1