Skip to content

Commit cebc115

Browse files
s1cksoerenreichardt
andcommitted
Align Nodes building in Scanning and Arrow
Co-authored-by: Sören Reichardt <soren.reichardt@neotechnology.com>
1 parent 05ff6db commit cebc115

File tree

2 files changed

+48
-35
lines changed

2 files changed

+48
-35
lines changed

core/src/main/java/org/neo4j/gds/core/loading/Nodes.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,20 @@
2020
package org.neo4j.gds.core.loading;
2121

2222
import org.immutables.value.Value;
23+
import org.neo4j.gds.NodeLabel;
24+
import org.neo4j.gds.PropertyMapping;
25+
import org.neo4j.gds.PropertyMappings;
2326
import org.neo4j.gds.annotation.ValueClass;
2427
import org.neo4j.gds.api.IdMap;
28+
import org.neo4j.gds.api.PropertyState;
29+
import org.neo4j.gds.api.properties.nodes.ImmutableNodeProperty;
2530
import org.neo4j.gds.api.properties.nodes.NodePropertyStore;
31+
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
32+
import org.neo4j.gds.api.schema.ImmutablePropertySchema;
2633
import org.neo4j.gds.api.schema.NodeSchema;
2734

35+
import java.util.Map;
36+
2837
@ValueClass
2938
public interface Nodes {
3039

@@ -37,4 +46,42 @@ default NodePropertyStore properties() {
3746
return NodePropertyStore.empty();
3847
}
3948

49+
static Nodes of(
50+
IdMap idMap,
51+
Map<NodeLabel, PropertyMappings> propertyMappings,
52+
Map<PropertyMapping, NodePropertyValues> propertyValues,
53+
PropertyState propertyState
54+
) {
55+
var nodeSchema = NodeSchema.empty();
56+
var nodePropertyStoreBuilder = NodePropertyStore.builder();
57+
58+
propertyMappings.forEach(((nodeLabel, mappings) -> {
59+
if (mappings.mappings().isEmpty()) {
60+
nodeSchema.addLabel(nodeLabel);
61+
} else {
62+
mappings.mappings().forEach(propertyMapping -> {
63+
var nodePropertyValues = propertyValues.get(propertyMapping);
64+
// The default value is either overridden by the user
65+
// or inferred from the actual property value.
66+
var defaultValue = propertyMapping.defaultValue().isUserDefined()
67+
? propertyMapping.defaultValue()
68+
: nodePropertyValues.valueType().fallbackValue();
69+
var propertySchema = ImmutablePropertySchema.builder()
70+
.key(propertyMapping.propertyKey())
71+
.valueType(nodePropertyValues.valueType())
72+
.defaultValue(defaultValue)
73+
.state(propertyState)
74+
.build();
75+
76+
nodeSchema.addProperty(nodeLabel, propertySchema.key(), propertySchema);
77+
nodePropertyStoreBuilder.putProperty(
78+
propertySchema.key(),
79+
ImmutableNodeProperty.of(nodePropertyValues, propertySchema)
80+
);
81+
});
82+
}
83+
}));
84+
85+
return ImmutableNodes.of(nodeSchema, idMap, nodePropertyStoreBuilder.build());
86+
}
4087
}

core/src/main/java/org/neo4j/gds/core/loading/ScanningNodesImporter.java

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@
2727
import org.neo4j.gds.api.GraphLoaderContext;
2828
import org.neo4j.gds.api.IdMap;
2929
import org.neo4j.gds.api.PropertyState;
30-
import org.neo4j.gds.api.properties.nodes.ImmutableNodeProperty;
31-
import org.neo4j.gds.api.properties.nodes.NodePropertyStore;
3230
import org.neo4j.gds.api.properties.nodes.NodePropertyValues;
33-
import org.neo4j.gds.api.schema.ImmutablePropertySchema;
34-
import org.neo4j.gds.api.schema.NodeSchema;
3531
import org.neo4j.gds.config.GraphProjectFromStoreConfig;
3632
import org.neo4j.gds.core.GraphDimensions;
3733
import org.neo4j.gds.core.IdMapBehaviorServiceProvider;
@@ -203,37 +199,7 @@ public Nodes build() {
203199
importPropertiesFromIndex(idMap, nodeProperties);
204200
}
205201

206-
var nodeSchema = NodeSchema.empty();
207-
var nodePropertyStoreBuilder = NodePropertyStore.builder();
208-
209-
this.propertyMappingsByLabel.forEach(((nodeLabel, mappings) -> {
210-
if (mappings.mappings().isEmpty()) {
211-
nodeSchema.addLabel(nodeLabel);
212-
} else {
213-
mappings.mappings().forEach(propertyMapping -> {
214-
var nodePropertyValues = nodeProperties.get(propertyMapping);
215-
// The default value is either overridden by the user
216-
// or inferred from the actual property value.
217-
var defaultValue = propertyMapping.defaultValue().isUserDefined()
218-
? propertyMapping.defaultValue()
219-
: nodePropertyValues.valueType().fallbackValue();
220-
var propertySchema = ImmutablePropertySchema.builder()
221-
.key(propertyMapping.propertyKey())
222-
.valueType(nodePropertyValues.valueType())
223-
.defaultValue(defaultValue)
224-
.state(PropertyState.PERSISTENT)
225-
.build();
226-
227-
nodeSchema.addProperty(nodeLabel, propertySchema.key(), propertySchema);
228-
nodePropertyStoreBuilder.putProperty(
229-
propertySchema.key(),
230-
ImmutableNodeProperty.of(nodePropertyValues, propertySchema)
231-
);
232-
});
233-
}
234-
}));
235-
236-
return ImmutableNodes.of(nodeSchema, idMap, nodePropertyStoreBuilder.build());
202+
return Nodes.of(idMap, this.propertyMappingsByLabel, nodeProperties, PropertyState.PERSISTENT);
237203
}
238204

239205
private void importPropertiesFromIndex(

0 commit comments

Comments
 (0)