docs: ADR-0036 (Proposed) — bind literal DML values, verbatim text only for expressions/queries

Records the decision that advanced-mode SQL DML should stop handing literal
data values to the engine as text and instead parse/validate/bind them
through the DSL's proven path — closing the value-validation gap, the
hint/highlight gap, and the offending-value-in-errors gap together. Verbatim
text stays for expressions, WHERE, INSERT…SELECT, and SELECT (full SQL
surface preserved; ADR-0026's limited Expr not imposed). Narrows ADR-0030 §4
/ ADR-0033 §10 once accepted; SELECT half of §4 stands.

Includes a characterization test (tests/sql_insert.rs) proving the bind-layer
gap: the DSL rejects the malformed date 2025/01/15, advanced-mode SQL accepts
it. Forward-notes added to ADR-0030/0033; README index updated.

Status: Proposed (design + /runda done; pending go-ahead to implement).
This commit is contained in:
claude@clouddev1
2026-05-26 20:49:40 +00:00
parent f8a91f41c9
commit 3e3a2fb171
5 changed files with 403 additions and 1 deletions
+10
View File
@@ -10,6 +10,16 @@ for the phase-exit report and the filled cross-cut matrix in
`docs/plans/20260520-adr-0033-phase-3.md`. Amendments 13 below
are part of this acceptance.
> **Forward note (2026-05-26).** The **Proposed ADR-0036** narrows the
> §10 verbatim-execution model for **literal data values**: rather than
> handing the user's literal text to the engine, `INSERT`/`UPDATE` should
> parse literal values to typed `Value`s, validate them, retain them on
> the command (for binding *and* error enrichment), and bind them as
> parameters — as the simple-mode DSL already does. Expressions, `WHERE`
> predicates, `INSERT … SELECT`, `RETURNING`, UPSERT, and `SELECT` stay
> verbatim text. The `Sql*` command variants and worker handlers remain;
> only the literal-value execution path changes. Pending acceptance.
## Context
ADR-0030 commissions advanced mode as a body of SQL grammar