feat(types)!: drop the blob column type (ADR-0005 Amendment 2)
blob was a dead-end: declarable but never fillable (no literal in either mode, seed-unsupported), so a blob column could only ever hold NULL. Remove Type::Blob + Value/CellValue::Blob + the base64 CSV path + the grammar slot + completion/render/type-change/seed handling + the binder refusal (whose message also carried a user-facing "DSL" copy-rule bug). The vocabulary is now nine types; base64 stays (clipboard OSC-52). Backward compat is the ADR-0015 migration framework's first real use: a v1->v2 format bump (CURRENT_SCHEMA_VERSION across serializer/parser/skeleton) with a migrator that rewrites `type: blob` -> `type: text`, and a forced .db rebuild from the migrated text when a blob column was actually converted (the stale .db keeps a STRICT BLOB engine column). Conversion to text is non-destructive and CSV-free. Covered by a full-stack integration test and a Tier-4 PTY test that opens a real legacy v1-blob project. Also sweeps the nine-type vocabulary through CLAUDE.md, requirements.md, the website (type reference, seed doc, highlight grammar), and the ADR-0030/0033/ 0035 cross-references; CHANGELOG Removed entry; handoff-79. BREAKING CHANGE: the `blob` column type is removed. Existing projects that declared a blob column are migrated on first open (the column becomes text; the original project.yaml is kept as a .v1.bak).
This commit is contained in:
@@ -404,7 +404,7 @@ since ADR-0027.)
|
||||
referenced column), then `ALTER TABLE … ALTER COLUMN TYPE` (4f —
|
||||
runtime-decomposed to `change_column_type` with `ForceConversion`, the
|
||||
§7 advanced policy: lossy converts with a note, incompatible + static
|
||||
refusals (`↔ blob`, non-`int → serial`) refuse, `int → serial` allowed;
|
||||
refusals (non-`int → serial`) refuse, `int → serial` allowed;
|
||||
the internal-`__rdbms_*` guard folded into `do_change_column_type`),
|
||||
then `ALTER TABLE` add/drop constraint + add FK (4g — `ADD [CONSTRAINT
|
||||
<name>] (CHECK | UNIQUE | FOREIGN KEY)` + `DROP CONSTRAINT <name>`;
|
||||
@@ -430,7 +430,7 @@ since ADR-0027.)
|
||||
refused with an engine-neutral message naming the construct.
|
||||
Implementation pending.)*
|
||||
- [x] **Q3** User-facing simplified types map transparently to
|
||||
SQLite STRICT types in generated DDL. *(All ten types implemented
|
||||
SQLite STRICT types in generated DDL. *(All nine types implemented
|
||||
and tested.)*
|
||||
- [x] **Q4** Supported SQL subset specification — **ADR-0030**.
|
||||
Advanced mode is a standard-SQL surface, engine-neutral; the
|
||||
@@ -462,10 +462,11 @@ since ADR-0027.)
|
||||
|
||||
## Type system (per ADR-0005)
|
||||
|
||||
- [x] **T1** All ten user-facing types implemented: `text`,
|
||||
`int`, `real`, `decimal`, `bool`, `date`, `datetime`, `blob`,
|
||||
- [x] **T1** All nine user-facing types implemented: `text`,
|
||||
`int`, `real`, `decimal`, `bool`, `date`, `datetime`,
|
||||
`serial`, `shortid`. *(Mapping to SQLite STRICT covered by
|
||||
ADR-0005; FK target type rule by ADR-0011.)*
|
||||
ADR-0005; FK target type rule by ADR-0011; `blob` dropped by
|
||||
ADR-0005 Amendment 2.)*
|
||||
- [x] **T2** `shortid` generation: base58, 10–12 characters,
|
||||
omits ambiguous characters; generated client-side at insert.
|
||||
*(Implemented per ADR-0014; auto-fills omitted shortid
|
||||
|
||||
Reference in New Issue
Block a user