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();
}
}
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());
}
}
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));
}
}
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));
}
}
Aggregations