5bb0a147f0
Generalises serial and shortid beyond their previous restricted forms: - `serial` is no longer restricted to single-column PK. Non-PK serial columns get an emitted UNIQUE constraint and use application-side MAX(col)+1 at INSERT time (rowid alias still drives the PK case for free; per ADR-0010 worker-thread serialisation, the read-then-insert sequence is safe). - `shortid` columns auto-fill existing null cells when the column is materialised — `add column T: x (shortid)` on a non-empty table no longer leaves rows in a not-really-valid NULL state. - `int -> serial` joins the type-change matrix as always-clean identity (closes the asymmetry vs `text -> shortid`); other sources are refused with a route-via-int hint. - `change column T: x (serial|shortid)` fills null source cells with sequence / generated values in the same rebuild transaction. Internal infrastructure: - ReadColumn gains `unique: bool`; read_schema detects single- column UNIQUE indexes via pragma_index_list / pragma_index_info; schema_to_ddl emits inline UNIQUE for non-PK columns. - ColumnSchema (persistence) gains `unique: bool` so the flag survives YAML round-trip and rebuild-from-text reconstructs it faithfully — preserves the "serial -> int leaves UNIQUE in place" promise across save/load cycles. - ChangeColumnTypeResult.client_side now carries `auto_filled` + `auto_fill_kind` alongside `transformed` + `lossy`; the app handler renders separate note lines when both apply. - AddColumnResult is a new return type carrying pre-rendered [client-side] note lines for the auto-fill paths. Tests: 519 -> 534 (+15). Clippy clean.
27 lines
1.8 KiB
Markdown
27 lines
1.8 KiB
Markdown
# Architecture Decision Records
|
|
|
|
This directory contains the project's ADRs, recorded per
|
|
[ADR-0000](0000-record-architecture-decisions.md).
|
|
|
|
## Index
|
|
|
|
- [ADR-0000 — Record architecture decisions](0000-record-architecture-decisions.md)
|
|
- [ADR-0001 — Language and TUI framework](0001-language-and-tui-framework.md)
|
|
- [ADR-0002 — Database engine](0002-database-engine.md)
|
|
- [ADR-0003 — Input modes and command dispatch](0003-input-modes-and-command-dispatch.md)
|
|
- [ADR-0004 — Project file format](0004-project-file-format.md)
|
|
- [ADR-0005 — Column type vocabulary](0005-column-type-vocabulary.md)
|
|
- [ADR-0006 — Undo snapshots and replay log](0006-undo-snapshots-and-replay-log.md)
|
|
- [ADR-0007 — Sharing and export](0007-sharing-and-export.md)
|
|
- [ADR-0008 — Testing approach](0008-testing-approach.md)
|
|
- [ADR-0009 — DSL command syntax conventions](0009-dsl-command-syntax-conventions.md)
|
|
- [ADR-0010 — Database access via a dedicated worker thread](0010-database-access-via-worker-thread.md)
|
|
- [ADR-0011 — Foreign-key column type compatibility](0011-fk-column-type-compatibility.md)
|
|
- [ADR-0012 — Internal metadata for user-facing column types](0012-internal-metadata-for-user-facing-types.md)
|
|
- [ADR-0013 — Relationships, naming, and the rebuild-table strategy](0013-relationships-and-rebuild-table.md)
|
|
- [ADR-0014 — Data operations, value literals, and the auto-show pattern](0014-data-operations-and-value-model.md)
|
|
- [ADR-0015 — Project storage runtime](0015-project-storage-runtime.md)
|
|
- [ADR-0016 — Pretty table rendering for data and structure views](0016-pretty-table-rendering.md)
|
|
- [ADR-0017 — Column type-change compatibility](0017-column-type-change-compatibility.md)
|
|
- [ADR-0018 — Auto-fill contracts for `serial` and `shortid` columns](0018-auto-fill-contracts-for-serial-and-shortid.md)
|