Releases: knoguchi/marsdb
Releases · knoguchi/marsdb
Release list
v0.8.0
See CHANGELOG.md for the full list.
Highlights:
- On-disk format v2: directory records (per-property reads) + composite-key adjacency (typed expansion as a key-prefix range). Format v1 files are rejected cleanly with a version error — including pre-versioning files, which are now detected instead of mis-stamped.
- openCypher TCK 3880/3880 (100%) — full ±999,999,999-year date range on a hand-rolled civil-calendar core.
- Executor fast paths: aggregating expansion chains run as tight counting loops (~25x on the 2-hop count shape).
- Planner start-point selection by endpoint cardinality — patterns written from the big side now start at the small/indexed/bound end (selectivity bench: 102 ms → 183 µs at 100k nodes).
- Bulk loading: group commit + temporal
$paramsupport (69.1 s → 5.25 s on the reference load script). - Fix: backups now include the index tables — declared indexes and unique constraints previously vanished on restore.
Install: cargo install marsdb-cli, pip install marsdb, or brew install knoguchi/marsdb/marsdb.
v0.7.1
Added
marsdb --nl "<question>"translates a plain-English question into Cypher via a local Ollama instance and runs it (read-only).- The CLI reads a
;-separated batch from stdin when it isn't a terminal (marsdb mydata.db < script.cypher), avoiding the OS's single-argument length cap. - Every built-in function's argument count is now checked before evaluation.
Fixed
ENDis now usable as a bound variable name.IndexSeekfires for$param/UNWIND-row-bound equality, not just literal constants.IndexSeekfires for aWHEREclause on a multi-hop pattern's start node, not just inline properties.parse_many's peak memory is now bounded to the largest single statement, not the whole batch (~13GB -> ~600MB on a 29MB/9,771-statement script).marsdb-nl2cypherstrips a stray trailing markdown code fence even with no matching opening fence.
See CHANGELOG.md for full details.
v0.7.0
Breaking
- On-disk database files created by any prior MarsDB release (v0.1.0-v0.6.0) can no longer be opened. redb 3.0 dropped support for its own v2 file format, which every prior release wrote; redb 4.x only reads v3+. No migration path — recreate the database. Pre-1.0, no known production data on this.
See CHANGELOG.md for the full list (dependency bumps, crates.io metadata, MSRV, Dependabot, doc rewrites).
v0.6.0
openCypher TCK conformance 94.4% → 99.9% (3878/3880 scenarios, 0 wrong-result). Full details in CYPHER_COVERAGE.md.
Added
- Parser replaced: ANTLR4-generated grammar instead of the hand-rolled
pestgrammar — the foundation for everything else in this release. marsdb-capi(C ABI) andmarsdb-go(cgo binding).- List-valued node/edge properties, and
$parametersnaming a list or a map. SET n = {...}/SET n += {...};MERGE/CREATE/DELETE/SET/REMOVEcan now chain directly into each other;ON MATCH/ON CREATEin either order inMERGE.- Variable-length relationship patterns: binding
[r*1..3]to a real list variable, matching against an already-bound list, and inline properties on the hop itself. - Named-path capture over patterns mixing a variable-length hop with other hops.
exists { MATCH ... RETURN ... }, the full nested-subquery form of existential subqueries.CALL proc(args) [YIELD ...]against a pluggableProcedureProvider.- A real manual: knoguchi.github.io/marsdb, README badges, and measured test coverage in CI.
Fixed
- Integer arithmetic overflow now returns a query error instead of panicking.
duration.between()/duration.inSeconds()component-accessor math, and combined ISO-8601 date-time duration string parsing.- The
nullliteral now types asKind::Unknown, fixing several wrongly-rejected compile-time cases. - A variable-length hop's own traversed edges weren't excluded from later hops of the same pattern, causing a silent double-count in some named-path-capture patterns.
- List-concat (
+) type inference wrongly rejected a laterCREATEoff a concatenated node/relationship list. marsdb-go's list-valued property JSON round-trip.marsdb-python'sPropertyValueconversion was missing a match arm forMap.
Full changelog: CHANGELOG.md