diff --git a/sqlx-mysql/src/error.rs b/sqlx-mysql/src/error.rs index 36560fb9..e995191d 100644 --- a/sqlx-mysql/src/error.rs +++ b/sqlx-mysql/src/error.rs @@ -10,6 +10,37 @@ use crate::protocol::ErrPacket; #[derive(Debug)] pub struct MySqlDatabaseError(pub(crate) ErrPacket); +impl MySqlDatabaseError { + /// Returns a human-readable error message. + pub fn message(&self) -> &str { + &*self.0.error_message + } + + /// Returns the error code. + /// + /// All possible error codes should be documented in + /// the [Server Error Message Reference]. Each code refers to a + /// unique error messasge. + /// + /// [Server Error Message Reference]: https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html + /// + pub const fn code(&self) -> u16 { + self.0.error_code + } + + /// Return the [SQLSTATE] error code. + /// + /// The error code consists of 5 characters with `"00000"` + /// meaning "no error". [SQLSTATE] values are defined by the SQL standard + /// and should be consistent across databases. + /// + /// [SQLSTATE]: https://en.wikipedia.org/wiki/SQLSTATE + /// + pub fn sql_state(&self) -> &str { + self.0.sql_state.as_deref().unwrap_or_default() + } +} + impl MySqlDatabaseError { pub(crate) fn new(code: u16, message: &str) -> Self { Self(ErrPacket::new(code, message))