Rust foundation
Stable types, schema, parser, HIR, and relational IR.
Roadmap
Development follows a vertical sequence. 62 items are complete. The numbered engine sequence ends at 73; later coordinator, columnar, and schema-evolution work is also complete. Serializable isolation, concurrent writers, and MCP remain planned or deferred.
Stable types, schema, parser, HIR, and relational IR.
4 KiB slotted pages, bounded buffer pool, heap insert/scan, and reopen.
Transaction lifecycle, versioned WAL, LSN / pageLSN, and durable commit.
Startup analysis, repeat-history redo, reverse undo, and crash-tail handling.
Lazy writer ownership, retryable commit/rollback, and before-image undo.
Quiescent checkpoints, monotonic logical LSNs, and bounded WAL generation recycling.
Contextual NULL typing, three-valued logic, and explicit IS NULL.
INSERT / UPDATE / DELETE, stable RowIds, and affected-row results.
Qualified columns, aliases, self joins, and nested-loop execution.
Canonical table encoding, SHA-256 fingerprints, and identity checks on open.
Page v4/v5 CRC32C, WAL v4 checksums, and decoder fuzzing.
ORDER BY, global aggregates, and in-memory GROUP BY.
Page v5 slot generations, tombstone reuse, and stale-locator detection.
Deterministic first-fit and UPDATE relocation that returns the current RowId.
Transactional create/insert/point lookup, mixed pages, and split recovery.
Exact (key, RowId) delete, merge-only rebalance, and root collapse.
Persistent IndexCatalog and transactional create_index backfill.
Registered indexes stay consistent with heap and SQL DML.
Equality and IS NULL predicates can select a point IndexScan.
Explicit ANALYZE snapshots and deterministic point access-path costs.
Language-neutral binary framing. Frozen; current servers reject v1 frames.
Manifest bootstrap, TCP sessions, and a dedicated database worker.
Mutual TLS, certificate principals, and per-table operation scopes.
Independent Go Protocol v2 client and generated typed bindings.
Synchronous netbadb-sdk::remote client over Protocol v2.
Offline catalog and statement inspection; current machine contract is Inspection JSON v7.
Diagnostics-only language server over SDK Schema Spec v1 or v2.
Reproducible warm-cache benchmarks without changing engine behavior.
Costed bounded Int64/UInt64 range scans.
Rejected join pairs allocate no combined row.
Analyzed Scan × Scan INNER JOIN may select a simple equi HashJoin.
Each immutable heap page is fully validated once per sequential scan.
NLJ and HashJoin bind column positions once before candidate loops.
Join predicates borrow column and literal scalars; only computed results are owned.
NestedLoopJoin skips left probes that cannot match any right row.
Exact candidate counting can replace a full NestedLoopJoin inner loop.
Query plans decode only required heap columns; DML still uses full rows.
Identity and unique projections move owned values instead of cloning them.
A lone global COUNT(column) over SeqScan counts presence without materializing rows.
One exact heap pass shares live-row counts across multiple COUNT outputs.
Borrowed Filter evaluation, streamed SeqScan/Filter/Project, and COUNT specializations.
WAL Prepare plus an independent coordinator log for two or more local write storages.
PartitionCatalog v1 RANGE partitioning with exact pruning and atomic row movement.
Synchronous LSM table storage with MVCC, SSTables, flush, and leveled compaction.
Bounded 256-row batches for SeqScan, Filter, Project, Limit, Aggregate, and HashJoin probe.
Explicit isolation handles; implicit statements use Read Committed. Serializable is not available.
Analyzed Scan × Scan INNER equality joins may point-probe an ordered right index.
Heap point-probe costs stay aligned with managed_page_count SeqScan comparison.
Database::open_catalog reconstructs the full schema without external TableDefs.
Transactional Heap CREATE TABLE over native SQL.
Exact prepared DROP TABLE name over the native SQL frontend.
Single-column non-unique Heap BTree CREATE INDEX and DROP INDEX.
Exact-width integers, Float32/Float64, and Bytes; no implicit numeric widening.
Current native wire contract. Servers and Rust/Go clients speak v2 only.
Heap rename, nullable ADD, restricted DROP, and SET/DROP NOT NULL over native SQL.
Gap-free DatabaseCommitSeq and a published Heap/LSM visibility vector. Repeatable Read pins the first vector.
Synchronous pipelining, log compaction, and explicit group commit with batched Prepare/Commit/Change Stream barriers.
Opt-in ColumnarScan, change stream, Base+Delta, compaction, lazy I/O, and caller-driven maintenance. Heap and LSM remain authoritative.
Caller-driven inspection and one-action maintenance. No background scheduler or timer.
Current netbadbd startup contract. Manifests v1–v10 are rejected.
Local Unix-domain operator protocol for status, Adaptive controls, and explicit physical-design approval.
netbadb-pgwire and netbadbd --postgres were deleted. Native Protocol v2 is the only database network frontend.
Serializable isolation, concurrent writers, and broader join enumeration remain later work.
Deferred: official MCP SDKs currently exceed the Rust 1.85 MSRV.
General ALTER COLUMN TYPE, one-sided/Text range costing, and broader HashJoin eligibility.
Serializable isolation, concurrent writers, and cross-process file locking
PRIMARY KEY / UNIQUE / FK constraints, IF EXISTS, and index-only scans
General ALTER COLUMN TYPE, LSM/partitioned DDL composition, and arbitrary ALTER after DML
Full SQL: outer joins, subqueries, HAVING, DISTINCT, window functions
External sort spill, PostgreSQL wire compatibility, and complete information_schema
MCP adapter (deferred past MSRV), SQL EXPLAIN, network CDC, and on-disk format migrations