1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
use crate::duckdb_state;
use std::{error, fmt};
/// Error Codes
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[non_exhaustive]
pub enum ErrorCode {
/// Internal logic error in SQLite
InternalMalfunction,
/// Access permission denied
PermissionDenied,
/// Callback routine requested an abort
OperationAborted,
/// The database file is locked
DatabaseBusy,
/// A table in the database is locked
DatabaseLocked,
/// A malloc() failed
OutOfMemory,
/// Attempt to write a readonly database
ReadOnly,
/// Operation terminated by sqlite3_interrupt()
OperationInterrupted,
/// Some kind of disk I/O error occurred
SystemIoFailure,
/// The database disk image is malformed
DatabaseCorrupt,
/// Unknown opcode in sqlite3_file_control()
NotFound,
/// Insertion failed because database is full
DiskFull,
/// Unable to open the database file
CannotOpen,
/// Database lock protocol error
FileLockingProtocolFailed,
/// The database schema changed
SchemaChanged,
/// String or BLOB exceeds size limit
TooBig,
/// Abort due to constraint violation
ConstraintViolation,
/// Data type mismatch
TypeMismatch,
/// Library used incorrectly
ApiMisuse,
/// Uses OS features not supported on host
NoLargeFileSupport,
/// Authorization denied
AuthorizationForStatementDenied,
/// 2nd parameter to sqlite3_bind out of range
ParameterOutOfRange,
/// File opened that is not a database file
NotADatabase,
/// SQL error or missing database
Unknown,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Error {
pub code: ErrorCode,
pub extended_code: duckdb_state,
}
impl Error {
pub fn new(result_code: duckdb_state) -> Error {
Error {
code: ErrorCode::Unknown,
extended_code: result_code,
}
}
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"Error code {}: {}",
self.extended_code,
code_to_str(self.extended_code)
)
}
}
impl error::Error for Error {
fn description(&self) -> &str {
code_to_str(self.extended_code)
}
}
pub fn code_to_str(_: duckdb_state) -> &'static str {
"Unknown error code"
}