docs: ADR-0031 — SQL expression grammar
ADR-0030 §3 commissioned a focused ADR for the stratified SQL expression grammar fragment. ADR-0031 records the decisions: - One unified precedence ladder (OR/AND/NOT, comparison/LIKE/IN/ BETWEEN/IS NULL predicates, arithmetic incl. `||`, function calls, CASE) — SQL treats booleans as values, so unlike ADR-0026's bool/scalar split this is a single ladder. - No AST — every Phase-1 consumer (SELECT projection, WHERE) runs validated SQL as text per ADR-0030 §4/§6; CHECK/DEFAULT in Phase 4 store text too. The fragment's job is accept / reject + the matched-terminal path + a source span. - Recursion via Subgrammar with ADR-0026's depth cap reused. - A parallel `grammar/sql_expr.rs` — separate from `expr.rs` so simple mode's 1240-test surface is untouched by construction. - Subquery expressions and qualified `t.c` column refs deferred to ADR-0030 Phase 2 (they need the recursive SELECT grammar). `%` modulo is included alongside `+ - * /` and `||` — it isn't ISO SQL but is near-universal across mainstream engines and matches learner expectations (pedagogy wins ties, ADR-0030). Status: Accepted. The implementation lands in subsequent commits.
This commit is contained in:
@@ -36,3 +36,4 @@ This directory contains the project's ADRs, recorded per
|
||||
- [ADR-0028 — Query plans (`EXPLAIN QUERY PLAN`)](0028-query-plans.md) — **Accepted**, an `explain` prefix command over `show data` / `update` / `delete`; an annotated, span-styled plan tree; introduces the `OutputLine` styled-runs mechanism (ADR-0016's deferred per-span styling) (`QA1` / `QA2`)
|
||||
- [ADR-0029 — Column constraints (NOT NULL / UNIQUE / CHECK / DEFAULT)](0029-column-constraints.md) — **Accepted**, the four column-level constraints declared in the column-spec suffix (`create table` / `add column`) and modified on existing columns via `add constraint …` / `drop constraint …`; a pre-flight dry-run guards populated columns; `CHECK` reuses the ADR-0026 expression grammar via `Subgrammar` (`C3`)
|
||||
- [ADR-0030 — Advanced mode: the standard-SQL surface](0030-advanced-mode-sql-surface.md) — **Accepted**, SQL added as grammar *within the unified grammar tree* (ADR-0024), not a separate batch parser — so SQL gets the same completion / highlighting / hints / parse-errors as the DSL; mode gates the SQL forms; DDL routes through the typed `Command` executor (metadata + type vocabulary preserved), DML and `SELECT` execute as validated SQL; engine-neutral posture, the DSL→SQL teaching echo; supersedes ADR-0001's `sqlparser-rs` reservation; phased plan (`Q1` / `Q2` / `Q4`)
|
||||
- [ADR-0031 — The SQL expression grammar](0031-sql-expression-grammar.md) — **Accepted**, the stratified SQL expression grammar fragment commissioned by ADR-0030 §3: a single precedence ladder (`OR`/`AND`/`NOT`, the comparison/`LIKE`/`IN`/`BETWEEN`/`IS NULL` predicate set, arithmetic incl. `||`, function calls, `CASE`) — the superset of ADR-0026's DSL `WHERE` grammar, authored as a parallel fragment so simple mode is untouched; pure validation, builds **no** AST (consumers run/store SQL as text per ADR-0030 §4/§6); reuses ADR-0026's `Subgrammar` recursion + depth cap unchanged; subquery expressions and qualified column refs deferred to ADR-0030 Phase 2
|
||||
|
||||
Reference in New Issue
Block a user