Skip to content

Commit 47f450a

Browse files
authored
graphview.bulk_add_edges actually uses ._root.bulk_add_edges (#272)
1 parent 1564427 commit 47f450a

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/tracksdata/graph/_graph_view.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,30 @@ def add_edge(
510510
return parent_edge_id
511511

512512
def bulk_add_edges(self, edges: list[dict[str, Any]], return_ids: bool = False) -> list[int] | None:
513-
return BaseGraph.bulk_add_edges(self, edges, return_ids=return_ids)
513+
# Capture source/target before _root.bulk_add_edges pops them from edge dicts
514+
source_ids = [edge[DEFAULT_ATTR_KEYS.EDGE_SOURCE] for edge in edges]
515+
target_ids = [edge[DEFAULT_ATTR_KEYS.EDGE_TARGET] for edge in edges]
516+
517+
# Always request ids — needed to build _edge_map_to_root
518+
parent_edge_ids = self._root.bulk_add_edges(edges=edges, return_ids=True)
519+
520+
if self.sync:
521+
for edge, source_id, target_id, parent_edge_id in zip(
522+
edges, source_ids, target_ids, parent_edge_ids, strict=True
523+
):
524+
# RustWorkXGraph sets EDGE_ID in the dict; SQLGraph does not — set explicitly
525+
edge[DEFAULT_ATTR_KEYS.EDGE_ID] = parent_edge_id
526+
edge_id = self.rx_graph.add_edge(
527+
self._map_to_local(source_id),
528+
self._map_to_local(target_id),
529+
edge,
530+
)
531+
self._edge_map_to_root.put(edge_id, parent_edge_id)
532+
else:
533+
self._out_of_sync = True
534+
535+
if return_ids:
536+
return parent_edge_ids
514537

515538
def remove_edge(
516539
self,

0 commit comments

Comments
 (0)