use of org.neo4j.storageengine.api.PropertyItem in project neo4j by neo4j.
the class PropertyExistenceEnforcer method properties.
private Cursor<PropertyItem> properties(NodeItem node) {
Lock lock = node.lock();
Cursor<PropertyItem> cursor = storeStatement().acquirePropertyCursor(node.nextPropertyId(), lock);
return txState.augmentPropertyCursor(cursor, txState.getNodeState(node.id()));
}
use of org.neo4j.storageengine.api.PropertyItem in project neo4j by neo4j.
the class StateHandlingStatementOperations method nodeRemoveProperty.
@Override
public Property nodeRemoveProperty(KernelStatement state, long nodeId, int propertyKeyId) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException {
DataWriteOperations ops = state.dataWriteOperations();
try (Cursor<NodeItem> cursor = nodeCursorById(state, nodeId)) {
NodeItem node = cursor.get();
DefinedProperty existingProperty = NO_SUCH_PROPERTY;
try (Cursor<PropertyItem> properties = nodeGetPropertyCursor(state, node, propertyKeyId)) {
if (properties.next()) {
existingProperty = Property.property(properties.get().propertyKeyId(), properties.get().value());
autoIndexing.nodes().propertyRemoved(ops, nodeId, propertyKeyId);
state.txState().nodeDoRemoveProperty(node.id(), existingProperty);
indexTxStateUpdater.onPropertyRemove(state, node, existingProperty);
}
}
if (existingProperty == NO_SUCH_PROPERTY) {
return Property.noProperty(propertyKeyId, EntityType.NODE, node.id());
}
return existingProperty;
}
}
use of org.neo4j.storageengine.api.PropertyItem in project neo4j by neo4j.
the class StateHandlingStatementOperations method relationshipRemoveProperty.
@Override
public Property relationshipRemoveProperty(KernelStatement state, long relationshipId, int propertyKeyId) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException {
DataWriteOperations ops = state.dataWriteOperations();
try (Cursor<RelationshipItem> cursor = relationshipCursorById(state, relationshipId)) {
RelationshipItem relationship = cursor.get();
Property existingProperty;
try (Cursor<PropertyItem> properties = relationshipGetPropertyCursor(state, relationship, propertyKeyId)) {
if (!properties.next()) {
existingProperty = Property.noProperty(propertyKeyId, EntityType.RELATIONSHIP, relationship.id());
} else {
existingProperty = Property.property(properties.get().propertyKeyId(), properties.get().value());
autoIndexing.relationships().propertyRemoved(ops, relationshipId, propertyKeyId);
state.txState().relationshipDoRemoveProperty(relationship.id(), (DefinedProperty) existingProperty);
}
}
return existingProperty;
}
}
use of org.neo4j.storageengine.api.PropertyItem in project neo4j by neo4j.
the class StateHandlingStatementOperations method relationshipSetProperty.
@Override
public Property relationshipSetProperty(KernelStatement state, long relationshipId, DefinedProperty property) throws EntityNotFoundException, InvalidTransactionTypeKernelException, AutoIndexingKernelException {
DataWriteOperations ops = state.dataWriteOperations();
try (Cursor<RelationshipItem> cursor = relationshipCursorById(state, relationshipId)) {
RelationshipItem relationship = cursor.get();
Property existingProperty;
try (Cursor<PropertyItem> properties = relationshipGetPropertyCursor(state, relationship, property.propertyKeyId())) {
if (!properties.next()) {
autoIndexing.relationships().propertyAdded(ops, relationshipId, property);
existingProperty = Property.noProperty(property.propertyKeyId(), EntityType.RELATIONSHIP, relationship.id());
} else {
existingProperty = Property.property(properties.get().propertyKeyId(), properties.get().value());
autoIndexing.relationships().propertyChanged(ops, relationshipId, existingProperty, property);
}
}
state.txState().relationshipDoReplaceProperty(relationship.id(), existingProperty, property);
return existingProperty;
}
}
use of org.neo4j.storageengine.api.PropertyItem in project neo4j by neo4j.
the class TxStateTransactionDataSnapshot method takeSnapshot.
private void takeSnapshot() {
try {
for (long nodeId : state.addedAndRemovedNodes().getRemoved()) {
try (Cursor<NodeItem> node = storeStatement.acquireSingleNodeCursor(nodeId)) {
if (node.next()) {
Lock lock = node.get().lock();
try (Cursor<PropertyItem> properties = storeStatement.acquirePropertyCursor(node.get().nextPropertyId(), lock)) {
while (properties.next()) {
removedNodeProperties.add(new NodePropertyEntryView(nodeId, store.propertyKeyGetName(properties.get().propertyKeyId()), null, properties.get().value()));
}
}
node.get().labels().visitKeys(labelId -> {
removedLabels.add(new LabelEntryView(nodeId, store.labelGetName(labelId)));
return false;
});
}
}
}
for (long relId : state.addedAndRemovedRelationships().getRemoved()) {
Relationship relationshipProxy = relationship(relId);
try (Cursor<RelationshipItem> relationship = storeStatement.acquireSingleRelationshipCursor(relId)) {
if (relationship.next()) {
Lock lock = relationship.get().lock();
try (Cursor<PropertyItem> properties = storeStatement.acquirePropertyCursor(relationship.get().nextPropertyId(), lock)) {
while (properties.next()) {
removedRelationshipProperties.add(new RelationshipPropertyEntryView(relationshipProxy, store.propertyKeyGetName(properties.get().propertyKeyId()), null, properties.get().value()));
}
}
}
}
}
for (NodeState nodeState : state.modifiedNodes()) {
Iterator<StorageProperty> added = nodeState.addedAndChangedProperties();
while (added.hasNext()) {
DefinedProperty property = (DefinedProperty) added.next();
assignedNodeProperties.add(new NodePropertyEntryView(nodeState.getId(), store.propertyKeyGetName(property.propertyKeyId()), property.value(), committedValue(nodeState, property.propertyKeyId())));
}
Iterator<Integer> removed = nodeState.removedProperties();
while (removed.hasNext()) {
Integer property = removed.next();
removedNodeProperties.add(new NodePropertyEntryView(nodeState.getId(), store.propertyKeyGetName(property), null, committedValue(nodeState, property)));
}
ReadableDiffSets<Integer> labels = nodeState.labelDiffSets();
for (Integer label : labels.getAdded()) {
assignedLabels.add(new LabelEntryView(nodeState.getId(), store.labelGetName(label)));
}
for (Integer label : labels.getRemoved()) {
removedLabels.add(new LabelEntryView(nodeState.getId(), store.labelGetName(label)));
}
}
for (RelationshipState relState : state.modifiedRelationships()) {
Relationship relationship = relationship(relState.getId());
Iterator<StorageProperty> added = relState.addedAndChangedProperties();
while (added.hasNext()) {
DefinedProperty property = (DefinedProperty) added.next();
assignedRelationshipProperties.add(new RelationshipPropertyEntryView(relationship, store.propertyKeyGetName(property.propertyKeyId()), property.value(), committedValue(relState, property.propertyKeyId())));
}
Iterator<Integer> removed = relState.removedProperties();
while (removed.hasNext()) {
Integer property = removed.next();
removedRelationshipProperties.add(new RelationshipPropertyEntryView(relationship, store.propertyKeyGetName(property), null, committedValue(relState, property)));
}
}
} catch (PropertyKeyIdNotFoundKernelException | LabelNotFoundKernelException e) {
throw new IllegalStateException("An entity that does not exist was modified.", e);
}
}
Aggregations