Parent
Part of #372 (ADR-0017).
What to build
order_by without nulls= sorts NULLs last on every backend. nulls="native" is the explicit escape for a backend's own default (Postgres and SQLite are opposites). Every order key on the wire carries an explicit null placement — a missing key is invalid.
This is a breaking change for omitted nulls=: Postgres DESC and SQLite ASC flip (NULLs move to last).
Acceptance criteria
Blocked by
None — can start immediately.
Parent
Part of #372 (ADR-0017).
What to build
order_bywithoutnulls=sorts NULLs last on every backend.nulls="native"is the explicit escape for a backend's own default (Postgres and SQLite are opposites). Every order key on the wire carries an explicit null placement — a missing key is invalid.This is a breaking change for omitted
nulls=: Postgres DESC and SQLite ASC flip (NULLs move to last).Acceptance criteria
nulls=acceptslast,first, andnative. Omitted meanslast.nulls=on a nullable column is NULLS LAST on both backends (cross-asserted result-set order).nulls="native"restores the documented dialect split and is not cross-asserted.order_byterm on the QueryIR payload carries explicitnulls. QueryIR version bumps. Existing golden vectors are updated by hand.nulls=token is a build-time error.Blocked by
None — can start immediately.