2.8 KiB
2.8 KiB
bstore-java Code Review
Review date: 2026-03-17
This review focuses on correctness, architectural fit to the current goals, and
remaining risks before using bstore-java as the reference implementation for
other language ports.
Findings
No new correctness findings were discovered in this final pass after the latest meta-history fixes.
Non-Findings
These areas looked acceptable for the current scope:
dboprimary-key semantics are now explicit and much less error-prone.- SQL
INhandling is parameterized. Action.first()cleanup is fixed.SQLReader.hasNext()no longer advances repeatedly.dbo.metais now appropriately lean for the current goals.ChangeEventas canonical history andDataOriginatoras module registry is a coherent split.terminal.save(changeEvent)now persists the event row without implicitly applying schema changes.apply_changes(...)now logs pending events before attempting structural changes, so failed batches do not lose the canonical change record.upgradeMetaSchema(...)now respects the caller-suppliedoriginatorIdandmigrationId.
Current Limits That Seem Acceptable
These are limitations, but they appear aligned with the current requirements:
- field rename is treated as drop + add rather than a first-class rename
- schema moves are rejected explicitly
- PK/auto-increment/unique/index rewrites are not yet supported in
apply_changes(...) - downgrade support is schema-shape oriented, not a full data-preserving rollback engine
- migration batches are still best-effort rather than transactional across all DDL plus history writes; the log is preserved, but partial application can still occur on backends or change sets that are not fully transactional
Suggested TODO List
Priority 1
- Decide whether to add optional transactional migration batches on backends that support transactional DDL, or keep the current best-effort semantics as the long-term contract.
- Add a short public example showing when to use
terminal.save(changeEvent)versusmeta.apply_changes(...).
Priority 2
- If
ChangeEventHerois no longer part of the intended public design, remove it or explicitly deprecate it to avoid confusion. - Consider exposing an explicit "planned but unapplied" query path for pending changes now that unapplied events are preserved in the log.
Priority 3
- Review old exploratory tests and either remove them permanently or mine any remaining useful cases into the curated suites.
- Prepare a concise cross-language contract document derived from the current
Java
dboandmetabehavior before porting further.
Bottom Line
The project is in a strong reference-implementation state for the original goals. The remaining important risks are mostly around future migration ergonomics and transaction semantics, not everyday CRUD correctness or core meta design.