MCPcopy Create free account
hub / github.com/GraphLite-AI/GraphLite / remove_node

Method remove_node

graphlite/src/storage/graph_cache.rs:281–316  ·  view source on GitHub ↗

Remove a node and all its connected edges

(&mut self, node_id: &str)

Source from the content-addressed store, hash-verified

279
280 /// Remove a node and all its connected edges
281 pub fn remove_node(&mut self, node_id: &str) -> Result<Node, GraphError> {
282 let node = self
283 .nodes
284 .remove(node_id)
285 .ok_or_else(|| GraphError::NodeNotFound(node_id.to_string()))?;
286
287 // Remove from label indices
288 for label in &node.labels {
289 if let Some(nodes) = self.node_labels.get_mut(label) {
290 nodes.retain(|id| id != node_id);
291 if nodes.is_empty() {
292 self.node_labels.remove(label);
293 }
294 }
295 }
296
297 // Collect all connected edges to remove
298 let mut edges_to_remove = Vec::new();
299 if let Some(outgoing) = self.adjacency_out.get(node_id) {
300 edges_to_remove.extend(outgoing.clone());
301 }
302 if let Some(incoming) = self.adjacency_in.get(node_id) {
303 edges_to_remove.extend(incoming.clone());
304 }
305
306 // Remove all connected edges
307 for edge_id in edges_to_remove {
308 let _ = self.remove_edge(&edge_id);
309 }
310
311 // Remove adjacency lists
312 self.adjacency_out.remove(node_id);
313 self.adjacency_in.remove(node_id);
314
315 Ok(node)
316 }
317
318 /// Remove an edge
319 pub fn remove_edge(&mut self, edge_id: &str) -> Result<Edge, GraphError> {

Callers 4

apply_undo_to_graphMethod · 0.80
execute_modificationMethod · 0.80
execute_modificationMethod · 0.80
apply_undo_operationMethod · 0.80

Calls 6

get_mutMethod · 0.80
cloneMethod · 0.80
remove_edgeMethod · 0.80
removeMethod · 0.45
is_emptyMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected