grammar+db: 3i — not_null_missing diagnostic + TableColumn constraints (ADR-0033 §8.3)
Extend SchemaCache TableColumn with not_null + has_default (with a TableColumn::new constructor for the common no-constraint case), populated in build_schema_cache from ColumnDescription (a PK column counts as not-null). New dml_not_null_missing_diagnostics pass: a WARNING when a SQL INSERT's explicit column list omits a column that is NOT NULL with no DEFAULT — advisory (the engine enforces it). serial/shortid (auto-filled) and defaulted columns are excluded. Anchored on the target-table ident (no token for the omitted column). Catalog key diagnostic.not_null_missing (engine-neutral). Tests (+4): fires on omitted required column; silent when included, when defaulted, and for auto-gen serial/shortid. ~24 TableColumn literal sites updated for the two new fields (build clean). 1591 pass / 0 fail / 1 ignored. Clippy clean. All three ADR-0033 §8 DML diagnostics now implemented. Remaining 3i: cross-cut verification + #12 UPSERT DO UPDATE validation.
This commit is contained in:
@@ -1002,6 +1002,13 @@ async fn build_schema_cache(database: &Database) -> crate::completion::SchemaCac
|
||||
c.user_type.map(|ty| TableColumn {
|
||||
name: c.name,
|
||||
user_type: ty,
|
||||
// A PK column is effectively NOT NULL even when
|
||||
// PRAGMA's notnull flag isn't set on it
|
||||
// (ADR-0033 §8.3); the not_null_missing pass
|
||||
// excludes auto-gen types (serial/shortid)
|
||||
// separately.
|
||||
not_null: c.notnull || c.primary_key,
|
||||
has_default: c.default.is_some(),
|
||||
})
|
||||
})
|
||||
.collect();
|
||||
|
||||
Reference in New Issue
Block a user