Skip to main content

EngineError

Enum EngineError 

Source
#[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
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

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

Source§

fn clone(&self) -> EngineError

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EngineError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for EngineError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl From<EvalError> for EngineError

Source§

fn from(e: EvalError) -> EngineError

Converts to this type from the input type.
Source§

impl From<ParseError> for EngineError

Source§

fn from(e: ParseError) -> EngineError

Converts to this type from the input type.
Source§

impl From<StorageError> for EngineError

Source§

fn from(e: StorageError) -> EngineError

Converts to this type from the input type.
Source§

impl PartialEq for EngineError

Source§

fn eq(&self, other: &EngineError) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for EngineError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.