Skip to content

Releases: jackc/jed

v0.2.0

Choose a tag to compare

@jackc jackc released this 07 Jul 23:26

Second public preview. Still 0.x, still no compatibility guarantee — and this release
changes the on-disk file format (format_version 21 → 25), so a database written by
v0.2.0 cannot be opened by v0.1.0, and vice versa. The three cores (Rust, Go, TypeScript)
remain in lockstep: byte-identical on-disk format and identical results, types, errors, and
execution cost.

Added

  • varchar(n) / string(n) length limits — parameterized text typmod; over-length
    input errors (22001), trailing spaces are truncated to fit.
  • Schema introspection — the jed_-prefixed catalog relations jed_tables,
    jed_columns, jed_indexes, and jed_constraints, queryable as ordinary read-only tables.
  • EXPLAIN / EXPLAIN ANALYZE — a deterministic plan dump; ANALYZE reports real
    execution cost.
  • Attached databases — a host may attach other jed databases (on disk or in-memory)
    under a name and query across them by database-qualified name (reports.sales) in one
    consistent snapshot. Attaching is a host-API act, never SQL.
  • jed-migrate — an opt-in, tern-modeled schema-migration library for all three cores,
    bundled by the CLI as the jed migrate subcommand.
  • Query planner — index-nested-loop join; OR / IN-list merged point lookups;
    secondary-index range scans with multi-column prefix bounds.
  • fsync = off — a create/open handle setting for development and testing.

Changed — storage (format_version 21 → 25)

  • PAX column-major leaf layout; a B+tree reshape (records live only in leaves, record-free
    routing interiors); on-disk free-list persistence with continuous within-session page
    reclamation (open no longer walks the whole file). Temporary tables now live on an
    in-memory block store, and in-memory databases are served through the same pager and
    packed-leaf read path as file-backed ones. Files written by v0.2.0 are not readable by
    v0.1.0.

Changed — host / embedding API (breaking for embedders)

  • Unified database constructors create(...) / open; the exec and query paths are
    unified onto a single query → Rows streaming seam; SharedDb was renamed to Database
    and the session handle unified; NoFsync was renamed to SkipFsync; the table_names
    convenience and the SHARED temporary-table surface were removed; the internal Engine
    and modules are now private behind a curated public API. Adds ergonomic per-language
    bindings, cross-core statement cancellation (57014), and a prepared-statement plan cache
    with streaming.

Performance

  • Packed (block-backed) PAX leaves with touched-column-only decode; a vectorized
    aggregate/filter executor; a true streaming result cursor with lazy record decode; open
    reads only the interior spine (the eager per-table row-count leaf walk is gone); geometric
    file preallocation; a smaller Go Value.

Distribution

  • Unchanged from v0.1.0: the Go module (github.com/jackc/jed/impl/go, pure Go) and the
    website & playground are the shipped artifacts. The Rust crate, the jed CLI, the npm
    package, and the Ruby gem are built in-repo but are not yet published to their registries.

jed v0.1.0 — public preview

Pre-release

Choose a tag to compare

@jackc jackc released this 27 Jun 20:28

First public preview. Embeddable, capable, safe for untrusted SQL — types and behavior modeled on PostgreSQL. 0.x: no stability guarantees and the on-disk format may change. See CHANGELOG.md.