v4.20.5

opencode-ai/opencodev4.20.5Sep 15, 2026by swilly22

Upgrading?

AI Summary

This release focuses on critical bug fixes in query execution and index management. Specifically, it corrects the counting of parallel edges in Cypher queries and resolves issues with index population that could cause row skipping or system hanging when dealing with delta matrices.

Key Highlights

  • Fixed `count(*)` returning incorrect results for parallel edges by preserving entity references in the reference-map builder.
  • Resolved index population issues that could skip rows or hang due to unsynced delta matrices.
  • Improved performance by releasing the read lock between edge batches during index population.

Full Release Notes

πŸ› Bug fixes

`count(*)` under-counted parallel edges

`MATCH (a)-[e]->(b) RETURN count(*)` returned 1 instead of 3 for three parallel edges. Because `count(*)` references no entity, the edge alias was left unreferenced, the algebraic expression dropped the edge, and the traversal emitted a single record per (src, dest) pair β€” collapsing parallel edges and under-counting. The reference-map builder now detects a star aggregation and keeps the pattern's named entities referenced so their multiplicity is preserved (scoped to user aliases and * projections only; plan-cache safe).
- PR: #2660

Index population could skip rows or hang on unsynced delta matrices

When a label or relation matrix held unsynced delta-plus entries, index population resumed batched scans at [last_row, MAX) while the iterators drained the main matrix before yielding delta-plus β€” permanently skipping delta-plus rows below the resume point (nodes), and spinning forever re-scanning the same range (edges, once a masking tautology was removed). Population now merges the main matrix and delta-plus in strict row-major order, making batch resume safe. Also releases the read lock between edge batches (~1.5s write stall on 1M edges β†’ ~5ms).
- PR: #2812
- Fixes: #2811

Related Repositories