Search in sources :

Example 6 with Degrees

use of org.neo4j.storageengine.api.Degrees in project neo4j by neo4j.

the class RelationshipTransactionStateTestBase method shouldAddToCountFromTxState.

@Test
void shouldAddToCountFromTxState() throws Exception {
    long start;
    long existingRelationship;
    int type;
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        start = write.nodeCreate();
        type = tx.tokenWrite().relationshipTypeGetOrCreateForName("OUT");
        existingRelationship = write.relationshipCreate(start, type, write.nodeCreate());
        tx.commit();
    }
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        long newRelationship = write.relationshipCreate(start, type, write.nodeCreate());
        try (NodeCursor node = tx.cursors().allocateNodeCursor(NULL);
            RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(NULL)) {
            org.neo4j.internal.kernel.api.Read read = tx.dataRead();
            read.singleNode(start, node);
            assertTrue(node.next());
            Degrees degrees = node.degrees(selection(type, BOTH));
            assertEquals(2, degrees.outgoingDegree(type));
            assertEquals(0, degrees.incomingDegree(type));
            assertRelationships(OUTGOING, node, type, traversal, newRelationship, existingRelationship);
        }
    }
}
Also used : Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Read(org.neo4j.internal.kernel.api.Read) Degrees(org.neo4j.storageengine.api.Degrees) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 7 with Degrees

use of org.neo4j.storageengine.api.Degrees in project neo4j by neo4j.

the class RelationshipTransactionStateTestBase method shouldSeeNewTypes.

@Test
void shouldSeeNewTypes() throws Exception {
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        long start = write.nodeCreate();
        int outgoing = tx.tokenWrite().relationshipTypeGetOrCreateForName("OUT");
        int incoming = tx.tokenWrite().relationshipTypeGetOrCreateForName("IN");
        int looping = tx.tokenWrite().relationshipTypeGetOrCreateForName("LOOP");
        long out = write.relationshipCreate(start, outgoing, write.nodeCreate());
        long in1 = write.relationshipCreate(write.nodeCreate(), incoming, start);
        long in2 = write.relationshipCreate(write.nodeCreate(), incoming, start);
        long loop = write.relationshipCreate(start, looping, start);
        try (NodeCursor node = tx.cursors().allocateNodeCursor(NULL);
            RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(NULL)) {
            org.neo4j.internal.kernel.api.Read read = tx.dataRead();
            read.singleNode(start, node);
            assertTrue(node.next());
            Degrees degrees = node.degrees(ALL_RELATIONSHIPS);
            for (int t : degrees.types()) {
                if (t == outgoing) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, out);
                    assertNoRelationships(INCOMING, node, t, traversal);
                } else if (t == incoming) {
                    assertEquals(0, degrees.outgoingDegree(t));
                    assertEquals(2, degrees.incomingDegree(t));
                    assertRelationships(INCOMING, node, t, traversal, in1, in2);
                    assertNoRelationships(OUTGOING, node, t, traversal);
                } else if (t == looping) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(1, degrees.incomingDegree(t));
                    assertRelationships(BOTH, node, t, traversal, loop);
                    assertRelationships(OUTGOING, node, t, traversal, loop);
                    assertRelationships(INCOMING, node, t, traversal, loop);
                } else {
                    fail(t + "  is not the type you're looking for ");
                }
            }
        }
    }
}
Also used : Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Read(org.neo4j.internal.kernel.api.Read) Degrees(org.neo4j.storageengine.api.Degrees) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 8 with Degrees

use of org.neo4j.storageengine.api.Degrees in project neo4j by neo4j.

the class RelationshipTransactionStateTestBase method shouldSeeBothOldAndNewRelationshipsFromSparseNode.

@Test
void shouldSeeBothOldAndNewRelationshipsFromSparseNode() throws Exception {
    long start;
    long existingRelationship;
    int one;
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        start = write.nodeCreate();
        one = tx.tokenWrite().relationshipTypeGetOrCreateForName("ONE");
        existingRelationship = write.relationshipCreate(start, one, write.nodeCreate());
        tx.commit();
    }
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        int two = tx.tokenWrite().relationshipTypeGetOrCreateForName("TWO");
        long newRelationship = write.relationshipCreate(start, two, write.nodeCreate());
        try (NodeCursor node = tx.cursors().allocateNodeCursor(NULL);
            RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(NULL)) {
            org.neo4j.internal.kernel.api.Read read = tx.dataRead();
            read.singleNode(start, node);
            assertTrue(node.next());
            assertFalse(node.supportsFastDegreeLookup());
            Degrees degrees = node.degrees(ALL_RELATIONSHIPS);
            for (int t : degrees.types()) {
                if (t == one) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, existingRelationship);
                } else if (t == two) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, newRelationship);
                } else {
                    fail(t + "  is not the type you're looking for ");
                }
            }
        }
    }
}
Also used : Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Read(org.neo4j.internal.kernel.api.Read) Degrees(org.neo4j.storageengine.api.Degrees) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 9 with Degrees

use of org.neo4j.storageengine.api.Degrees in project neo4j by neo4j.

the class RelationshipTransactionStateTestBase method shouldSeeBothOldAndNewRelationshipsFromDenseNode.

@Test
void shouldSeeBothOldAndNewRelationshipsFromDenseNode() throws Exception {
    long start;
    long existingRelationship;
    int one, bulk;
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        start = write.nodeCreate();
        one = tx.tokenWrite().relationshipTypeGetOrCreateForName("ONE");
        existingRelationship = write.relationshipCreate(start, one, write.nodeCreate());
        bulk = tx.tokenWrite().relationshipTypeGetOrCreateForName("BULK");
        for (int i = 0; i < 100; i++) {
            write.relationshipCreate(start, bulk, write.nodeCreate());
        }
        tx.commit();
    }
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        int two = tx.tokenWrite().relationshipTypeGetOrCreateForName("TWO");
        long newRelationship = write.relationshipCreate(start, two, write.nodeCreate());
        try (NodeCursor node = tx.cursors().allocateNodeCursor(NULL);
            RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(NULL)) {
            org.neo4j.internal.kernel.api.Read read = tx.dataRead();
            read.singleNode(start, node);
            assertTrue(node.next());
            assertTrue(node.supportsFastDegreeLookup());
            Degrees degrees = node.degrees(ALL_RELATIONSHIPS);
            for (int t : degrees.types()) {
                if (t == one) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, existingRelationship);
                } else if (t == two) {
                    assertEquals(1, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, newRelationship);
                } else if (t == bulk) {
                    assertEquals(100, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                } else {
                    fail(t + "  is not the type you're looking for ");
                }
            }
        }
    }
}
Also used : Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Read(org.neo4j.internal.kernel.api.Read) Degrees(org.neo4j.storageengine.api.Degrees) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Example 10 with Degrees

use of org.neo4j.storageengine.api.Degrees in project neo4j by neo4j.

the class RelationshipTransactionStateTestBase method shouldNewRelationshipBetweenAlreadyConnectedDenseNodes.

@Test
void shouldNewRelationshipBetweenAlreadyConnectedDenseNodes() throws Exception {
    long start;
    long end;
    long existingRelationship;
    int type, bulk;
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        start = write.nodeCreate();
        end = write.nodeCreate();
        type = tx.tokenWrite().relationshipTypeGetOrCreateForName("R");
        existingRelationship = write.relationshipCreate(start, type, end);
        bulk = tx.tokenWrite().relationshipTypeGetOrCreateForName("BULK");
        for (int i = 0; i < 100; i++) {
            write.relationshipCreate(start, bulk, write.nodeCreate());
        }
        tx.commit();
    }
    try (KernelTransaction tx = beginTransaction()) {
        Write write = tx.dataWrite();
        long newRelationship = write.relationshipCreate(start, type, write.nodeCreate());
        try (NodeCursor node = tx.cursors().allocateNodeCursor(NULL);
            RelationshipTraversalCursor traversal = tx.cursors().allocateRelationshipTraversalCursor(NULL)) {
            org.neo4j.internal.kernel.api.Read read = tx.dataRead();
            read.singleNode(start, node);
            assertTrue(node.next());
            assertTrue(node.supportsFastDegreeLookup());
            Degrees degrees = node.degrees(ALL_RELATIONSHIPS);
            for (int t : degrees.types()) {
                if (t == type) {
                    assertEquals(2, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                    assertRelationships(OUTGOING, node, t, traversal, existingRelationship, newRelationship);
                } else if (t == bulk) {
                    assertEquals(bulk, t);
                    assertEquals(100, degrees.outgoingDegree(t));
                    assertEquals(0, degrees.incomingDegree(t));
                } else {
                    fail(t + "  is not the type you're looking for ");
                }
            }
        }
    }
}
Also used : Write(org.neo4j.internal.kernel.api.Write) RelationshipTraversalCursor(org.neo4j.internal.kernel.api.RelationshipTraversalCursor) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) Read(org.neo4j.internal.kernel.api.Read) Degrees(org.neo4j.storageengine.api.Degrees) NodeCursor(org.neo4j.internal.kernel.api.NodeCursor) Test(org.junit.jupiter.api.Test)

Aggregations

NodeCursor (org.neo4j.internal.kernel.api.NodeCursor)11 Degrees (org.neo4j.storageengine.api.Degrees)11 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)10 Test (org.junit.jupiter.api.Test)9 Read (org.neo4j.internal.kernel.api.Read)9 Write (org.neo4j.internal.kernel.api.Write)9 RelationshipTraversalCursor (org.neo4j.internal.kernel.api.RelationshipTraversalCursor)7 CursorFactory (org.neo4j.internal.kernel.api.CursorFactory)2 TokenWrite (org.neo4j.internal.kernel.api.TokenWrite)2 ArrayList (java.util.ArrayList)1 KernelException (org.neo4j.exceptions.KernelException)1 NotFoundException (org.neo4j.graphdb.NotFoundException)1 RelationshipType (org.neo4j.graphdb.RelationshipType)1 TokenRead (org.neo4j.internal.kernel.api.TokenRead)1 EntityNotFoundException (org.neo4j.internal.kernel.api.exceptions.EntityNotFoundException)1 InvalidTransactionTypeKernelException (org.neo4j.internal.kernel.api.exceptions.InvalidTransactionTypeKernelException)1 LabelNotFoundKernelException (org.neo4j.internal.kernel.api.exceptions.LabelNotFoundKernelException)1 PropertyKeyIdNotFoundKernelException (org.neo4j.internal.kernel.api.exceptions.PropertyKeyIdNotFoundKernelException)1 TokenCapacityExceededKernelException (org.neo4j.internal.kernel.api.exceptions.schema.TokenCapacityExceededKernelException)1