Skip to content

Commit ceb4f75

Browse files
Reflect mutated properties in storage engine
1 parent 4fe86e9 commit ceb4f75

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

cypher/api/storage-engine-adapter/src/main/java/org/neo4j/gds/compat/AbstractInMemoryStorageEngine.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ public AbstractInMemoryStorageEngine(
9292
initializeTokenHolders();
9393
graphStore.initialize(tokenHolders);
9494
graphStore.registerPropertyRemovalCallback(txStateVisitor::removeNodeProperty);
95+
graphStore.registerPropertyAddedCallback(this::addProperty);
9596
this.countsStore = countsStoreFn.apply(graphStore, tokenHolders);
9697
this.metadataProvider = metadataProvider;
9798
}
@@ -209,6 +210,14 @@ private void initializeTokenHolders() {
209210
.addToken(new NamedToken(relType.name(), typeCounter.getAndIncrement())));
210211
}
211212

213+
private void addProperty(String propertyName) {
214+
try {
215+
tokenHolders.propertyKeyTokens().getOrCreateId(propertyName);
216+
} catch (KernelException e) {
217+
throw new RuntimeException(e);
218+
}
219+
}
220+
212221
private static CypherGraphStore getGraphStoreFromCatalog(String graphName) {
213222
return (CypherGraphStore) GraphStoreCatalog.getAllGraphStores()
214223
.filter(graphStoreWithUserNameAndConfig -> graphStoreWithUserNameAndConfig

cypher/cypher-core/src/main/java/org/neo4j/gds/core/cypher/CypherGraphStore.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import org.neo4j.gds.api.GraphStore;
2424
import org.neo4j.gds.api.GraphStoreAdapter;
2525
import org.neo4j.gds.api.IdMap;
26+
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
2627
import org.neo4j.token.TokenHolders;
2728

29+
import java.util.Set;
2830
import java.util.function.Consumer;
2931

3032
public class CypherGraphStore extends GraphStoreAdapter implements NodeLabelUpdater {
@@ -33,6 +35,7 @@ public class CypherGraphStore extends GraphStoreAdapter implements NodeLabelUpda
3335

3436
private RelationshipIds relationshipIds;
3537
private Consumer<String> propertyRemovalCallback;
38+
private Consumer<String> propertyAddedCallback;
3639

3740
public CypherGraphStore(GraphStore graphStore) {
3841
super(graphStore);
@@ -47,6 +50,10 @@ public void registerPropertyRemovalCallback(Consumer<String> propertyRemovalCall
4750
this.propertyRemovalCallback = propertyRemovalCallback;
4851
}
4952

53+
public void registerPropertyAddedCallback(Consumer<String> propertyAddedCallback) {
54+
this.propertyAddedCallback = propertyAddedCallback;
55+
}
56+
5057
@Override
5158
public IdMap nodes() {
5259
return this.cypherIdMap;
@@ -65,7 +72,19 @@ public void addLabelToNode(long nodeId, NodeLabel nodeLabel) {
6572
@Override
6673
public void removeNodeProperty(String propertyKey) {
6774
super.removeNodeProperty(propertyKey);
68-
propertyRemovalCallback.accept(propertyKey);
75+
if (propertyRemovalCallback != null) {
76+
propertyRemovalCallback.accept(propertyKey);
77+
}
78+
}
79+
80+
@Override
81+
public void addNodeProperty(
82+
Set<NodeLabel> nodeLabels, String propertyKey, NodePropertyValues propertyValues
83+
) {
84+
super.addNodeProperty(nodeLabels, propertyKey, propertyValues);
85+
if (propertyAddedCallback != null) {
86+
propertyAddedCallback.accept(propertyKey);
87+
}
6988
}
7089

7190
public RelationshipIds relationshipIds() {

0 commit comments

Comments
 (0)