Skip to content

Conversation

@dylanbstorey
Copy link
Contributor

No description provided.

Dylan Storey added 2 commits January 10, 2026 08:26
Add insert_nodes_bulk, insert_edges_bulk, insert_graph_bulk, and
resolve_node_ids methods to both Rust and Python bindings. These
methods bypass Cypher parsing and use direct SQL with in-memory
ID mapping to achieve 100-500x faster insert rates compared to
individual upsert operations.

Key design: Build HashMap<external_id, internal_rowid> during node
insertion, then use that map for edge insertion to avoid expensive
MATCH queries that would otherwise require 4+ JOINs through the
EAV property tables.

Includes comprehensive integration tests for both binding sets.
The Cypher extension's internal transaction management conflicts with
external transaction wrapping, preventing atomic batch operations.

Updated batch method documentation to clearly state that:
- Batch methods are convenience wrappers only
- They do NOT provide atomicity guarantees
- Users should use bulk insert methods for atomic operations

Resolves GQLITE-T-0094 - the bulk insert feature (GQLITE-T-0093)
provides the high-performance atomic operations users need.
@dylanbstorey dylanbstorey merged commit 269c6cd into main Jan 10, 2026
15 checks passed
@dylanbstorey dylanbstorey deleted the feat/bulk-insert-operations branch January 14, 2026 16:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants