use of org.neo4j.internal.kernel.api.NodeCursor in project neo4j by neo4j.
the class KernelReadTracerTest method shouldTracePropertyAccess.
@Test
void shouldTracePropertyAccess() {
// given
TestKernelReadTracer tracer = new TestKernelReadTracer();
try (NodeCursor nodeCursor = cursors.allocateNodeCursor(NULL);
PropertyCursor propertyCursor = cursors.allocatePropertyCursor(NULL, INSTANCE)) {
// when
propertyCursor.setTracer(tracer);
read.singleNode(foo, nodeCursor);
assertTrue(nodeCursor.next());
nodeCursor.properties(propertyCursor);
assertTrue(propertyCursor.next());
tracer.assertEvents(OnProperty(propertyCursor.propertyKey()));
assertTrue(propertyCursor.next());
tracer.assertEvents(OnProperty(propertyCursor.propertyKey()));
propertyCursor.removeTracer();
assertTrue(propertyCursor.next());
tracer.assertEvents();
propertyCursor.setTracer(tracer);
assertTrue(propertyCursor.next());
tracer.assertEvents(OnProperty(propertyCursor.propertyKey()));
assertFalse(propertyCursor.next());
tracer.assertEvents();
}
}
use of org.neo4j.internal.kernel.api.NodeCursor in project neo4j by neo4j.
the class NodeTransactionStateTestBase method shouldSeeUpdatedPropertyFromExistingNodeWithPropertiesInTransaction.
@Test
void shouldSeeUpdatedPropertyFromExistingNodeWithPropertiesInTransaction() throws Exception {
// Given
long nodeId;
String propKey = "prop1";
int propToken;
try (KernelTransaction tx = beginTransaction()) {
nodeId = tx.dataWrite().nodeCreate();
propToken = tx.token().propertyKeyGetOrCreateForName(propKey);
assertEquals(NO_VALUE, tx.dataWrite().nodeSetProperty(nodeId, propToken, stringValue("hello")));
tx.commit();
}
// When/Then
try (KernelTransaction tx = beginTransaction()) {
assertEquals(tx.dataWrite().nodeSetProperty(nodeId, propToken, stringValue("world")), stringValue("hello"));
try (NodeCursor node = tx.cursors().allocateNodeCursor(tx.cursorContext());
PropertyCursor property = tx.cursors().allocatePropertyCursor(tx.cursorContext(), tx.memoryTracker())) {
tx.dataRead().singleNode(nodeId, node);
assertTrue(node.next(), "should access node");
node.properties(property);
assertTrue(property.next());
assertEquals(propToken, property.propertyKey());
assertEquals(property.propertyValue(), stringValue("world"));
assertFalse(property.next(), "should only find one property");
assertFalse(node.next(), "should only find one node");
}
tx.commit();
}
try (org.neo4j.graphdb.Transaction tx = graphDb.beginTx()) {
assertThat(tx.getNodeById(nodeId).getProperty(propKey)).isEqualTo("world");
}
}
use of org.neo4j.internal.kernel.api.NodeCursor in project neo4j by neo4j.
the class NodeTransactionStateTestBase method shouldSeeRemovedPropertyInTransaction.
@Test
void shouldSeeRemovedPropertyInTransaction() throws Exception {
// Given
long nodeId;
String propKey = "prop1";
int propToken;
try (KernelTransaction tx = beginTransaction()) {
nodeId = tx.dataWrite().nodeCreate();
propToken = tx.token().propertyKeyGetOrCreateForName(propKey);
assertEquals(NO_VALUE, tx.dataWrite().nodeSetProperty(nodeId, propToken, stringValue("hello")));
tx.commit();
}
// When/Then
try (KernelTransaction tx = beginTransaction()) {
assertEquals(tx.dataWrite().nodeRemoveProperty(nodeId, propToken), stringValue("hello"));
try (NodeCursor node = tx.cursors().allocateNodeCursor(tx.cursorContext());
PropertyCursor property = tx.cursors().allocatePropertyCursor(tx.cursorContext(), tx.memoryTracker())) {
tx.dataRead().singleNode(nodeId, node);
assertTrue(node.next(), "should access node");
node.properties(property);
assertFalse(property.next(), "should not find any properties");
assertFalse(node.next(), "should only find one node");
}
tx.commit();
}
try (org.neo4j.graphdb.Transaction tx = graphDb.beginTx()) {
assertFalse(tx.getNodeById(nodeId).hasProperty(propKey));
}
}
use of org.neo4j.internal.kernel.api.NodeCursor in project neo4j by neo4j.
the class NodeTransactionStateTestBase method hasPropertiesShouldSeeNewlyCreatedPropertiesOnNewlyCreatedNode.
@Test
void hasPropertiesShouldSeeNewlyCreatedPropertiesOnNewlyCreatedNode() throws Exception {
try (KernelTransaction tx = beginTransaction()) {
long node = tx.dataWrite().nodeCreate();
try (NodeCursor cursor = tx.cursors().allocateNodeCursor(tx.cursorContext());
PropertyCursor props = tx.cursors().allocatePropertyCursor(tx.cursorContext(), tx.memoryTracker())) {
tx.dataRead().singleNode(node, cursor);
assertTrue(cursor.next());
assertFalse(hasProperties(cursor, props));
tx.dataWrite().nodeSetProperty(node, tx.tokenWrite().propertyKeyGetOrCreateForName("prop"), stringValue("foo"));
assertTrue(hasProperties(cursor, props));
}
}
}
use of org.neo4j.internal.kernel.api.NodeCursor in project neo4j by neo4j.
the class NodeTransactionStateTestBase method shouldSeeAddedPropertyFromExistingNodeWithoutPropertiesInTransaction.
@Test
void shouldSeeAddedPropertyFromExistingNodeWithoutPropertiesInTransaction() throws Exception {
// Given
long nodeId;
String propKey = "prop1";
try (KernelTransaction tx = beginTransaction()) {
nodeId = tx.dataWrite().nodeCreate();
tx.commit();
}
// When/Then
try (KernelTransaction tx = beginTransaction()) {
int propToken = tx.token().propertyKeyGetOrCreateForName(propKey);
assertEquals(NO_VALUE, tx.dataWrite().nodeSetProperty(nodeId, propToken, stringValue("hello")));
try (NodeCursor node = tx.cursors().allocateNodeCursor(tx.cursorContext());
PropertyCursor property = tx.cursors().allocatePropertyCursor(tx.cursorContext(), tx.memoryTracker())) {
tx.dataRead().singleNode(nodeId, node);
assertTrue(node.next(), "should access node");
node.properties(property);
assertTrue(property.next());
assertEquals(propToken, property.propertyKey());
assertEquals(property.propertyValue(), stringValue("hello"));
assertFalse(property.next(), "should only find one properties");
assertFalse(node.next(), "should only find one node");
}
tx.commit();
}
try (org.neo4j.graphdb.Transaction tx = graphDb.beginTx()) {
assertThat(tx.getNodeById(nodeId).getProperty(propKey)).isEqualTo("hello");
}
}
Aggregations