Files
rdbms-playground/docs/simple-mode-limitations.md
T
claude@clouddev1 6e42a118a3 docs: add ADR-0026 — complex WHERE expressions
The C5a design: a stratified, recursive WHERE-expression
grammar (AND/OR/NOT, comparisons, LIKE, IS NULL, IN,
BETWEEN) for update / delete / show-data filters; show
data gains optional `where` and `limit`. Adds the
`Subgrammar` reference-following grammar node and a
recursive `Expr` AST, built selectively for the
expression fragment.

- docs/adr/0026-complex-where-expressions.md — the ADR.
- docs/adr/README.md — index entry.
- docs/simple-mode-limitations.md — new running list of
  simple-mode query boundaries vs. advanced SQL, seeded
  from ADR-0026.
- docs/requirements.md — C5a [~] -> [ ] (designed, not
  yet implemented); new Documentation section with DOC1.
2026-05-18 10:34:12 +00:00

41 lines
1.5 KiB
Markdown

# Simple-mode query limitations
Simple mode's DSL query surface is deliberately a *subset*
of SQL. The DSL is a teaching on-ramp; advanced mode (raw
SQL) is the full surface. This document is the running
list of what a simple-mode query cannot express that
advanced-mode SQL can.
It serves two audiences:
- **Students** — each entry is the seed of a short
explanation of why the boundary exists and what to use
instead (often: switch to advanced mode).
- **Designers** — the consolidated list feeds the future
`Q4` SQL-subset specification: the inverse view of what
the supported subset deliberately leaves out.
The list grows as new simple-mode surface lands; each
entry names the ADR that drew the boundary.
## WHERE expressions (ADR-0026)
- **Comparison operands are a column or a literal**, not a
nested expression. `(a > b) = (c > d)` — comparing two
boolean sub-expressions — cannot be written. Parentheses
group boolean sub-expressions, not comparison operands.
- **A bare column is not a boolean.** A predicate always
has an operator: write `Active = true`, not `Active`.
- **No arithmetic** in expressions (`Price * 1.1`).
- **No string concatenation.**
- **No scalar functions** (`upper(Name)`, `length(x)`, …).
- **No subqueries**, and no `EXISTS`.
## Query shape (ADR-0026)
- **No `ORDER BY`.** `show data … limit <n>` orders
implicitly by the primary key; explicit ordering is not
yet available.
- **No `LIMIT … OFFSET`** — `limit` takes a row count
only.