feat(seed): set override clause + column-fill (ADR-0048 Phase 2)
Build the two SD2 surfaces Phase 1 deferred:
- `set` override clause (D2): comma-separated per-column pins —
`= 'v'` (fixed), `in ('a','b')` (pick-list), `as <generator>`
(named), `between x and y` (range; numeric and quoted dates).
Type-aware via the typed `current_column_value` slot; an override
drops its column from the generic-fill advisory (D13). Folded from
the flat matched path (build_seed_overrides) and applied to the
per-column plan (apply_seed_overrides).
- `<table>.<column>` column-fill (D1 form 2): an UPDATE over existing
rows. Refuses PK/autogen targets, empty-table no-op, FK-samples the
parent, collision-free for UNIQUE/identifier targets, one undo step;
`set` may only adjust the filled column.
Supporting work: KNOWN_GENERATORS vocabulary + generator_for_name
(src/seed/vocabulary.rs, D9); a range Generator + range_bounds_reason;
IdentSource::Generators and HighlightClass::Function; completion of the
generator vocabulary after `as` and the set/.col column slots; the
typing-time validity indicator for an unknown generator; help,
parse-error pedagogy rows, and the D13 advisory's Phase-2/3 wording.
A bounded override (fixed value / too-short pick-list) on a
single-column-UNIQUE target is a friendly error rather than a silent
uniqueness cap (post-implementation /runda finding, user-chosen).
Dates in the range form are quoted (no date-literal token exists);
ADR-0048 D2 amended accordingly. Both modes (D5); reproducible (D4).
This commit is contained in:
@@ -57,6 +57,12 @@ pub enum HighlightClass {
|
||||
String,
|
||||
Punct,
|
||||
Flag,
|
||||
/// A curated function-vocabulary name — the `seed … set <col> as
|
||||
/// <generator>` generator names (ADR-0048 D2/§Grammar). Rendered in
|
||||
/// the existing `tok_function` colour (ADR-0022 Amд6 blue — no new
|
||||
/// theme colour), assigned via a generator slot's
|
||||
/// `highlight_override`, not by byte shape.
|
||||
Function,
|
||||
Error,
|
||||
}
|
||||
|
||||
@@ -86,6 +92,14 @@ pub enum IdentSource {
|
||||
/// content validator on column-type slots; not user-listable
|
||||
/// from the schema.
|
||||
Types,
|
||||
/// Closed, curated set of fake-data generator names (ADR-0048
|
||||
/// D9) — the `seed … set <col> as <generator>` slot. Like
|
||||
/// `Types`, not user-listable from the schema; the vocabulary
|
||||
/// lives in `src/seed` and the completion engine offers it. The
|
||||
/// grammar slot is purely structural (matches any identifier);
|
||||
/// an unknown name is flagged live (validity) and rejected at
|
||||
/// execution.
|
||||
Generators,
|
||||
/// Any identifier shape; used by synthetic catch-all branches
|
||||
/// (e.g., the unknown-value branch of `mode <value>`).
|
||||
Free,
|
||||
@@ -117,6 +131,7 @@ impl IdentSource {
|
||||
Self::Relationships => "relationship name",
|
||||
Self::Indexes => "index name",
|
||||
Self::Types => "type",
|
||||
Self::Generators => "generator name",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,6 +149,7 @@ impl IdentSource {
|
||||
"relationship name" => Some(Self::Relationships),
|
||||
"index name" => Some(Self::Indexes),
|
||||
"type" => Some(Self::Types),
|
||||
"generator name" => Some(Self::Generators),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user