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:
+2
-3
@@ -631,7 +631,7 @@ pub fn candidates_at_cursor_with_in_mode(
|
||||
// Source 1.5: type-name candidates when the walker expects
|
||||
// a column-type slot. Type names are a closed set sourced
|
||||
// from `Type::all()` (ADR-0005 declaration order:
|
||||
// text/int/real/decimal/bool/date/datetime/blob/serial/
|
||||
// text/int/real/decimal/bool/date/datetime/serial/
|
||||
// shortid). The walker surfaces this as
|
||||
// `Expectation::Ident { source: Types }`.
|
||||
let type_names: Vec<String> = if expected.iter().any(|e| {
|
||||
@@ -2309,7 +2309,7 @@ mod tests {
|
||||
#[test]
|
||||
fn type_slot_offers_full_type_vocabulary_when_partial_empty() {
|
||||
// After `add column to T: Name (` the parser expects
|
||||
// a column type. With no partial typed, all ten types
|
||||
// a column type. With no partial typed, all nine types
|
||||
// from `Type::all()` are offered in declaration order.
|
||||
let cs = cands("add column to T: Name (", 23);
|
||||
assert_eq!(
|
||||
@@ -2322,7 +2322,6 @@ mod tests {
|
||||
"bool".to_string(),
|
||||
"date".to_string(),
|
||||
"datetime".to_string(),
|
||||
"blob".to_string(),
|
||||
"serial".to_string(),
|
||||
"shortid".to_string(),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user