Entity / Operators
Failure and recovery
Every failure is a refusal by name, at the earliest moment that can see it:
| What | Refused | Why there |
|---|---|---|
a definedAs that reads a field it did not take | when the operator is called | nothing could see what the call reads |
| an argument of the wrong stored kind | where the call is written | SQL would coerce it silently (SQLite binds a number as a real) |
| text with no collation where one is required | where the call or order term is written | each database compares such text its own way |
| an operator a server's table lacks | where the query, invariant, write or rule is registered | not on the first request that needs it |
| an operator the client's table lacks | not judged on the client: an incomplete filter, a live row the server places | a client can be behind its server |
| text holding a NUL | that row, or the run when the input holds it | Postgres text cannot hold one; SQLite's like stops at it |
| a law an implementation breaks | Conformance.laws answers Counterexample with both sides | a declared law is a claim until tested |
| a law whose every call is refused | Conformance.laws answers Unanswered, and records nothing | two refusals agree, but show nothing of the law |
A refusal never becomes an empty answer. A body the client cannot judge is
"I could not tell" (skipped, complete: false, unknown), never "no rows".
Strict null means an operator needs no null cases in its laws or its implementation: a null argument makes the call null (unknown, for a predicate) before any implementation runs.