feat: ADR-0035 4d — CREATE [UNIQUE] INDEX / DROP INDEX
Advanced-mode SQL CREATE [UNIQUE] INDEX [IF NOT EXISTS] [<name>] ON <T> (cols) -> SqlCreateIndex and DROP INDEX [IF EXISTS] <name> -> SqlDropIndex, both reusing the ADR-0025 executors (do_add_index / do_drop_index), like 4c reused do_drop_table. - CREATE UNIQUE INDEX admitted in advanced mode (ADR-0025 Amendment 1): ADR-0025 deferred UNIQUE indexes for the simple-mode DSL, but advanced mode trusts the user like SQL does. Adds an additive IndexSchema.unique flag (project.yaml, serde-default, version stays 1); rebuild re-emits CREATE UNIQUE INDEX; the redundant-set guard keys on (columns, unique). Simple-mode `add unique index` stays deferred. - IF [NOT] EXISTS on both forms reuses the 4c no-op-with-note skip (journalled, not snapshotted) via CreateIndexOutcome / DropIndexOutcome. - Unnamed CREATE INDEX auto-named (ADR-0025 convention); the [UNIQUE] prefix is a concrete-keyword Choice and the optional name an on-led-first selector (the drop-index selector precedent) — trap-safe. - create/drop each gain a second advanced node; the existing all-candidates dispatch handles it (locked by parse tests). - Unique indexes marked [unique] in the structure view and items panel. - do_add_index refuses internal __rdbms_* tables as "no such table", closing a latent exposure on both the simple `add index` and the new SQL CREATE INDEX surfaces (ADR-0025 Amendment 1). Docs: ADR-0035 status + §13 4d + 4i; ADR-0025 Amendment 1; ADR README; requirements.md Q1/C3. Plan: docs/plans/20260525-adr-0035-sql-ddl-4d.md. Tests: 1834 passing / 0 failing / 0 skipped / 1 ignored; clippy clean.
This commit is contained in:
+13
-3
@@ -48,9 +48,19 @@ pub struct SchemaCache {
|
||||
/// case-insensitive in `columns_for_table` so the walker
|
||||
/// can resolve `Customers` regardless of how it was typed.
|
||||
pub table_columns: std::collections::HashMap<String, Vec<TableColumn>>,
|
||||
/// Per-table user index names (ADR-0025). Keyed by table
|
||||
/// name; drives the nested tables/indexes items panel (S2).
|
||||
pub table_indexes: std::collections::HashMap<String, Vec<String>>,
|
||||
/// Per-table user indexes (ADR-0025). Keyed by table name; drives
|
||||
/// the nested tables/indexes items panel (S2). Each entry carries
|
||||
/// the index's uniqueness so the panel can mark a UNIQUE index
|
||||
/// (ADR-0035 §4d).
|
||||
pub table_indexes: std::collections::HashMap<String, Vec<IndexEntry>>,
|
||||
}
|
||||
|
||||
/// One per-table index for the items panel (ADR-0025 / ADR-0035 §4d):
|
||||
/// its name and whether it is a UNIQUE index.
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct IndexEntry {
|
||||
pub name: String,
|
||||
pub unique: bool,
|
||||
}
|
||||
|
||||
/// One column's user-facing type info, scoped to a table
|
||||
|
||||
Reference in New Issue
Block a user