One JOIN clause from the FROM list. Multi-join queries
(A JOIN B ... JOIN C ...) become a Vec<JoinClause> evaluated
left-to-right against the accumulator. v1 requires an ON condition;
USING / NATURAL / CROSS are deferred.
A parsed ORDER BY clause: a single sort key (expression), ascending
by default. Phase 7b widened this from “bare column name” to
“arbitrary expression” so KNN queries of the form
ORDER BY vec_distance_l2(col, [...]) LIMIT k work end-to-end. The
expression is evaluated per-row at execution time via eval_expr;
the simple ORDER BY col form still works because that’s just an
Expr::Identifier taking the same path.
SQLR-5 — flavor of join. SQLite ships INNER and LEFT OUTER; we
implement the full quartet on top of a single nested-loop driver
because the per-flavor differences are small (NULL-padding policy
for unmatched left/right rows). RIGHT OUTER and FULL OUTER aren’t
in SQLite — see docs/design-decisions.md for the rationale.