Skip to content

Releases: knoguchi/marsdb

v0.8.0

Choose a tag to compare

@knoguchi knoguchi released this 08 Aug 17:17
3b0f0e6

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 $param support (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

Choose a tag to compare

@knoguchi knoguchi released this 07 Aug 09:29
5ae6660

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

  • END is now usable as a bound variable name.
  • IndexSeek fires for $param/UNWIND-row-bound equality, not just literal constants.
  • IndexSeek fires for a WHERE clause 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-nl2cypher strips a stray trailing markdown code fence even with no matching opening fence.

See CHANGELOG.md for full details.

v0.7.0

Choose a tag to compare

@knoguchi knoguchi released this 07 Aug 02:18
76c99b0

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

Choose a tag to compare

@knoguchi knoguchi released this 07 Aug 00:18
3d0aecb

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 pest grammar — the foundation for everything else in this release.
  • marsdb-capi (C ABI) and marsdb-go (cgo binding).
  • List-valued node/edge properties, and $parameters naming a list or a map.
  • SET n = {...} / SET n += {...}; MERGE/CREATE/DELETE/SET/REMOVE can now chain directly into each other; ON MATCH/ON CREATE in either order in MERGE.
  • 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 pluggable ProcedureProvider.
  • 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 null literal now types as Kind::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 later CREATE off a concatenated node/relationship list.
  • marsdb-go's list-valued property JSON round-trip.
  • marsdb-python's PropertyValue conversion was missing a match arm for Map.

Full changelog: CHANGELOG.md