#[non_exhaustive]pub enum EngineError {
Show 18 variants
Parse(ParseError),
Storage(StorageError),
Eval(EvalError),
Unsupported(String),
TransactionAlreadyOpen,
NoActiveTransaction,
InFailedTransaction,
LockWouldBlock,
LockDeadlock,
CardinalityViolation,
SerializationFailure(String),
WriteRequired,
RowLimitExceeded(usize),
QueryBytesExceeded(usize),
Cancelled,
UnknownThreadId(u32),
ConnectionKilled,
Internal(String),
}Expand description
All errors the engine can return.
Marked #[non_exhaustive] from v7.5.0 onward: external match
must include a _ arm so new variants in subsequent v7.x releases
are not breaking changes.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Parse(ParseError)
Storage(StorageError)
Eval(EvalError)
Unsupported(String)
Front-end accepted a construct that the v0.x executor doesn’t support.
TransactionAlreadyOpen
BEGIN while another transaction is already open.
NoActiveTransaction
COMMIT / ROLLBACK with no active transaction.
InFailedTransaction
v7.38 (read01 P3.26) — a statement other than COMMIT / ROLLBACK / ROLLBACK TO SAVEPOINT was issued after an earlier statement in the same transaction failed. PG aborts the whole transaction on the first error and rejects everything until it is ended (SQLSTATE 25P02); this mirrors that so partial work can’t slip through.
LockWouldBlock
v7.39 (round 299, E3 Phase 2) — a row lock is held by another
transaction and the policy is Wait.
Its own variant, not an Unsupported string: the SERVER has to
recognise it to retry, and it cannot block inside the engine
write lock — doing so would stop the whole server, including the
transaction whose commit would release the lock.
LockDeadlock
v7.39 (round 299) — granting the wait would close a wait-for cycle. PG’s 40P01.
CardinalityViolation
v7.38 (read01 P4.02) — a scalar / row subquery used as an expression returned more than one row. PG raises this as SQLSTATE 21000 (CARDINALITY_VIOLATION) with a fixed message.
SerializationFailure(String)
v7.37.17 (Phase E3) — a REPEATABLE READ / SERIALIZABLE commit found a write-write conflict with a concurrently-committed transaction (a row this tx wrote was deleted/updated by another committed writer, or a unique key this tx inserted was taken). PG raises SQLSTATE 40001; the client retries the transaction. The failing COMMIT rolls the transaction back, like PG.
WriteRequired
v4.0 sentinel: execute_readonly got a statement that
mutates engine state (INSERT / CREATE / BEGIN / COMMIT / …).
The caller should retake the write lock and dispatch through
execute(&mut self) instead.
RowLimitExceeded(usize)
v4.2: a SELECT would have returned more rows than the
configured max_query_rows cap. Carries the cap.
QueryBytesExceeded(usize)
v7.30.3 (mailrs round-26): a SELECT’s join/filter
materialisation would have held more (approximate) heap
bytes than the configured max_query_bytes cap. The row
cap above counts rows; this counts bytes, because one row
can be a multi-MB mail body — 1000 fat rows pressure the
host long before any row ceiling trips. Carries the cap.
Cancelled
v4.5: cooperative cancellation — the host (server’s per-query watchdog) set the cancel flag while a long-running SELECT / UPDATE / DELETE was scanning rows. The partial work is discarded; the caller should surface this as a timeout to the client.
UnknownThreadId(u32)
v7.39 (round 318, V51) — MySQL KILL <id> naming an id no live
connection carries. MariaDB 11: ERROR 1094 (HY000) Unknown thread id: N.
ConnectionKilled
v7.39 (round 318, V51) — MySQL KILL <own id>. The connection
really is killed; MariaDB reports it to the victim as
ERROR 1927 (70100) Connection was killed and closes.
Internal(String)
v7.38 Epic P (panic isolation): a panic unwound out of
statement execution and was caught at the engine’s
execute_* boundary (see execute_in_with_cancel). The
in-flight transaction’s shadow was discarded (rollback) and
the engine left consistent; the caller sees this ordinary
error instead of a crashed process / poisoned lock. NOTE:
under the release panic = "abort" profile the process
aborts before any unwind, so this variant only ever surfaces
in dev/test (panic = "unwind") — and in production once a
later slice flips the release profile to unwind.
Trait Implementations§
Source§impl Clone for EngineError
impl Clone for EngineError
Source§fn clone(&self) -> EngineError
fn clone(&self) -> EngineError
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more