use core::{
ffi::{CStr, c_int},
fmt,
num::NonZero,
};
use sqlite::{
SQLITE_ABORT, SQLITE_ABORT_ROLLBACK, SQLITE_AUTH, SQLITE_AUTH_USER, SQLITE_BUSY,
SQLITE_BUSY_RECOVERY, SQLITE_BUSY_SNAPSHOT, SQLITE_BUSY_TIMEOUT, SQLITE_CANTOPEN,
SQLITE_CANTOPEN_CONVPATH, SQLITE_CANTOPEN_DIRTYWAL, SQLITE_CANTOPEN_FULLPATH,
SQLITE_CANTOPEN_ISDIR, SQLITE_CANTOPEN_NOTEMPDIR, SQLITE_CANTOPEN_SYMLINK, SQLITE_CONSTRAINT,
SQLITE_CONSTRAINT_CHECK, SQLITE_CONSTRAINT_COMMITHOOK, SQLITE_CONSTRAINT_DATATYPE,
SQLITE_CONSTRAINT_FOREIGNKEY, SQLITE_CONSTRAINT_FUNCTION, SQLITE_CONSTRAINT_NOTNULL,
SQLITE_CONSTRAINT_PINNED, SQLITE_CONSTRAINT_PRIMARYKEY, SQLITE_CONSTRAINT_ROWID,
SQLITE_CONSTRAINT_TRIGGER, SQLITE_CONSTRAINT_UNIQUE, SQLITE_CONSTRAINT_VTAB, SQLITE_CORRUPT,
SQLITE_CORRUPT_INDEX, SQLITE_CORRUPT_SEQUENCE, SQLITE_CORRUPT_VTAB, SQLITE_EMPTY, SQLITE_ERROR,
SQLITE_ERROR_MISSING_COLLSEQ, SQLITE_ERROR_RETRY, SQLITE_ERROR_SNAPSHOT, SQLITE_FORMAT,
SQLITE_FULL, SQLITE_INTERNAL, SQLITE_INTERRUPT, SQLITE_IOERR, SQLITE_IOERR_ACCESS,
SQLITE_IOERR_AUTH, SQLITE_IOERR_BEGIN_ATOMIC, SQLITE_IOERR_BLOCKED,
SQLITE_IOERR_CHECKRESERVEDLOCK, SQLITE_IOERR_CLOSE, SQLITE_IOERR_COMMIT_ATOMIC,
SQLITE_IOERR_CONVPATH, SQLITE_IOERR_CORRUPTFS, SQLITE_IOERR_DATA, SQLITE_IOERR_DELETE,
SQLITE_IOERR_DELETE_NOENT, SQLITE_IOERR_DIR_CLOSE, SQLITE_IOERR_DIR_FSYNC, SQLITE_IOERR_FSTAT,
SQLITE_IOERR_FSYNC, SQLITE_IOERR_GETTEMPPATH, SQLITE_IOERR_LOCK, SQLITE_IOERR_MMAP,
SQLITE_IOERR_NOMEM, SQLITE_IOERR_RDLOCK, SQLITE_IOERR_READ, SQLITE_IOERR_ROLLBACK_ATOMIC,
SQLITE_IOERR_SEEK, SQLITE_IOERR_SHMLOCK, SQLITE_IOERR_SHMMAP, SQLITE_IOERR_SHMOPEN,
SQLITE_IOERR_SHMSIZE, SQLITE_IOERR_SHORT_READ, SQLITE_IOERR_TRUNCATE, SQLITE_IOERR_UNLOCK,
SQLITE_IOERR_VNODE, SQLITE_IOERR_WRITE, SQLITE_LOCKED, SQLITE_LOCKED_SHAREDCACHE,
SQLITE_LOCKED_VTAB, SQLITE_MISMATCH, SQLITE_MISUSE, SQLITE_NOLFS, SQLITE_NOMEM, SQLITE_NOTADB,
SQLITE_NOTFOUND, SQLITE_OK, SQLITE_PERM, SQLITE_PROTOCOL, SQLITE_RANGE, SQLITE_READONLY,
SQLITE_READONLY_CANTINIT, SQLITE_READONLY_CANTLOCK, SQLITE_READONLY_DBMOVED,
SQLITE_READONLY_DIRECTORY, SQLITE_READONLY_RECOVERY, SQLITE_READONLY_ROLLBACK, SQLITE_SCHEMA,
SQLITE_TOOBIG, sqlite3_errstr,
};
pub type Result<T> = core::result::Result<T, Error>;
#[derive(PartialEq, Eq, Copy, Clone)]
pub struct Error {
code: NonZero<i32>,
}
impl Error {
pub(crate) const fn new(code: i32) -> Option<Self> {
match NonZero::new(code) {
Some(code) => Some(Self { code }),
None => None,
}
}
pub(crate) const unsafe fn new_unchecked(code: i32) -> Self {
Self {
code: unsafe { NonZero::new_unchecked(code) },
}
}
pub(crate) const fn unknown() -> Self {
unsafe { Self::new_unchecked(SQLITE_ERROR) }
}
pub(crate) const fn misuse() -> Self {
unsafe { Self::new_unchecked(SQLITE_MISUSE) }
}
pub(crate) const fn range() -> Self {
unsafe { Self::new_unchecked(SQLITE_RANGE) }
}
pub(crate) const fn too_big() -> Self {
unsafe { Self::new_unchecked(SQLITE_TOOBIG) }
}
pub const fn into_inner(self) -> i32 {
self.code.get()
}
pub const fn category(&self) -> ErrorCategory {
let primary_code = self.into_inner() & 0xFF;
#[allow(deprecated)]
match primary_code {
SQLITE_ABORT => ErrorCategory::Aborted,
SQLITE_AUTH => ErrorCategory::Authorization,
SQLITE_BUSY => ErrorCategory::Busy,
SQLITE_CANTOPEN => ErrorCategory::CantOpen,
SQLITE_CONSTRAINT => ErrorCategory::Constraint,
SQLITE_CORRUPT => ErrorCategory::Corrupt,
SQLITE_EMPTY => ErrorCategory::Empty,
SQLITE_ERROR => ErrorCategory::Unknown,
SQLITE_FORMAT => ErrorCategory::Format,
SQLITE_FULL => ErrorCategory::Full,
SQLITE_INTERNAL => ErrorCategory::Internal,
SQLITE_INTERRUPT => ErrorCategory::Interrupt,
SQLITE_IOERR => ErrorCategory::Io,
SQLITE_LOCKED => ErrorCategory::Locked,
SQLITE_MISMATCH => ErrorCategory::Mismatch,
SQLITE_MISUSE => ErrorCategory::Misuse,
SQLITE_NOLFS => ErrorCategory::LargeFile,
SQLITE_NOMEM => ErrorCategory::OutOfMemory,
SQLITE_NOTADB => ErrorCategory::InvalidDatabase,
SQLITE_NOTFOUND => ErrorCategory::NotFound,
SQLITE_PERM => ErrorCategory::Permission,
SQLITE_PROTOCOL => ErrorCategory::Protocol,
SQLITE_RANGE => ErrorCategory::Range,
SQLITE_READONLY => ErrorCategory::ReadOnly,
SQLITE_SCHEMA => ErrorCategory::Schema,
SQLITE_TOOBIG => ErrorCategory::TooBig,
_ => ErrorCategory::Unknown,
}
}
pub const fn code(&self) -> Option<ErrorCode> {
#[allow(deprecated)]
match self.into_inner() {
SQLITE_ABORT_ROLLBACK => Some(ErrorCode::Aborted(AbortError::Rollback)),
SQLITE_AUTH_USER => Some(ErrorCode::Authorization(AuthorizationError::User)),
SQLITE_BUSY_RECOVERY => Some(ErrorCode::Busy(BusyError::Recovery)),
SQLITE_BUSY_SNAPSHOT => Some(ErrorCode::Busy(BusyError::Snapshot)),
SQLITE_BUSY_TIMEOUT => Some(ErrorCode::Busy(BusyError::Timeout)),
SQLITE_CANTOPEN_FULLPATH => Some(ErrorCode::CantOpen(CantOpenError::FullPath)),
SQLITE_CANTOPEN_ISDIR => Some(ErrorCode::CantOpen(CantOpenError::IsDir)),
SQLITE_CANTOPEN_NOTEMPDIR => Some(ErrorCode::CantOpen(CantOpenError::NoTempDir)),
SQLITE_CANTOPEN_CONVPATH => Some(ErrorCode::CantOpen(CantOpenError::ConvPath)),
SQLITE_CANTOPEN_DIRTYWAL => Some(ErrorCode::CantOpen(CantOpenError::DirtyWal)),
SQLITE_CANTOPEN_SYMLINK => Some(ErrorCode::CantOpen(CantOpenError::Symlink)),
SQLITE_CONSTRAINT_CHECK => Some(ErrorCode::Constraint(ConstraintError::Check)),
SQLITE_CONSTRAINT_COMMITHOOK => {
Some(ErrorCode::Constraint(ConstraintError::CommitHook))
}
SQLITE_CONSTRAINT_DATATYPE => Some(ErrorCode::Constraint(ConstraintError::DataType)),
SQLITE_CONSTRAINT_FOREIGNKEY => {
Some(ErrorCode::Constraint(ConstraintError::ForeignKey))
}
SQLITE_CONSTRAINT_FUNCTION => Some(ErrorCode::Constraint(ConstraintError::Function)),
SQLITE_CONSTRAINT_NOTNULL => Some(ErrorCode::Constraint(ConstraintError::NotNull)),
SQLITE_CONSTRAINT_PINNED => Some(ErrorCode::Constraint(ConstraintError::Pinned)),
SQLITE_CONSTRAINT_PRIMARYKEY => {
Some(ErrorCode::Constraint(ConstraintError::PrimaryKey))
}
SQLITE_CONSTRAINT_ROWID => Some(ErrorCode::Constraint(ConstraintError::RowId)),
SQLITE_CONSTRAINT_TRIGGER => Some(ErrorCode::Constraint(ConstraintError::Trigger)),
SQLITE_CONSTRAINT_UNIQUE => Some(ErrorCode::Constraint(ConstraintError::Unique)),
SQLITE_CONSTRAINT_VTAB => Some(ErrorCode::Constraint(ConstraintError::VTab)),
SQLITE_CORRUPT_INDEX => Some(ErrorCode::Corrupt(CorruptError::Index)),
SQLITE_CORRUPT_SEQUENCE => Some(ErrorCode::Corrupt(CorruptError::Sequence)),
SQLITE_CORRUPT_VTAB => Some(ErrorCode::Corrupt(CorruptError::VTab)),
SQLITE_ERROR_MISSING_COLLSEQ => Some(ErrorCode::Error(GeneralError::MissingCollSeq)),
SQLITE_ERROR_RETRY => Some(ErrorCode::Error(GeneralError::Retry)),
SQLITE_ERROR_SNAPSHOT => Some(ErrorCode::Error(GeneralError::Snapshot)),
SQLITE_IOERR_READ => Some(ErrorCode::Io(IoError::Read)),
SQLITE_IOERR_WRITE => Some(ErrorCode::Io(IoError::Write)),
SQLITE_IOERR_FSYNC => Some(ErrorCode::Io(IoError::FSync)),
SQLITE_IOERR_FSTAT => Some(ErrorCode::Io(IoError::FStat)),
SQLITE_IOERR_TRUNCATE => Some(ErrorCode::Io(IoError::Truncate)),
SQLITE_IOERR_UNLOCK => Some(ErrorCode::Io(IoError::Unlock)),
SQLITE_IOERR_RDLOCK => Some(ErrorCode::Io(IoError::ReadLock)),
SQLITE_IOERR_DELETE => Some(ErrorCode::Io(IoError::Delete)),
SQLITE_IOERR_BLOCKED => Some(ErrorCode::Io(IoError::Blocked)),
SQLITE_IOERR_NOMEM => Some(ErrorCode::Io(IoError::NoMem)),
SQLITE_IOERR_ACCESS => Some(ErrorCode::Io(IoError::Access)),
SQLITE_IOERR_CHECKRESERVEDLOCK => Some(ErrorCode::Io(IoError::CheckReservedLock)),
SQLITE_IOERR_LOCK => Some(ErrorCode::Io(IoError::Lock)),
SQLITE_IOERR_CLOSE => Some(ErrorCode::Io(IoError::Close)),
SQLITE_IOERR_DIR_CLOSE => Some(ErrorCode::Io(IoError::DirClose)),
SQLITE_IOERR_SHMOPEN => Some(ErrorCode::Io(IoError::ShmOpen)),
SQLITE_IOERR_SHMSIZE => Some(ErrorCode::Io(IoError::ShmSize)),
SQLITE_IOERR_SHMLOCK => Some(ErrorCode::Io(IoError::ShmLock)),
SQLITE_IOERR_SHMMAP => Some(ErrorCode::Io(IoError::ShmMap)),
SQLITE_IOERR_SEEK => Some(ErrorCode::Io(IoError::Seek)),
SQLITE_IOERR_DELETE_NOENT => Some(ErrorCode::Io(IoError::DeleteNoEnt)),
SQLITE_IOERR_MMAP => Some(ErrorCode::Io(IoError::MMap)),
SQLITE_IOERR_GETTEMPPATH => Some(ErrorCode::Io(IoError::GetTempPath)),
SQLITE_IOERR_CONVPATH => Some(ErrorCode::Io(IoError::ConvPath)),
SQLITE_IOERR_VNODE => Some(ErrorCode::Io(IoError::VNode)),
SQLITE_IOERR_AUTH => Some(ErrorCode::Io(IoError::Auth)),
SQLITE_IOERR_BEGIN_ATOMIC => Some(ErrorCode::Io(IoError::BeginAtomic)),
SQLITE_IOERR_COMMIT_ATOMIC => Some(ErrorCode::Io(IoError::CommitAtomic)),
SQLITE_IOERR_ROLLBACK_ATOMIC => Some(ErrorCode::Io(IoError::RollbackAtomic)),
SQLITE_IOERR_DATA => Some(ErrorCode::Io(IoError::Data)),
SQLITE_IOERR_CORRUPTFS => Some(ErrorCode::Io(IoError::CorruptFS)),
SQLITE_IOERR_SHORT_READ => Some(ErrorCode::Io(IoError::ShortRead)),
SQLITE_IOERR_DIR_FSYNC => Some(ErrorCode::Io(IoError::DirFSync)),
SQLITE_LOCKED_SHAREDCACHE => Some(ErrorCode::Locked(LockedError::SharedCache)),
SQLITE_LOCKED_VTAB => Some(ErrorCode::Locked(LockedError::VTab)),
SQLITE_READONLY_RECOVERY => Some(ErrorCode::ReadOnly(ReadOnlyError::Recovery)),
SQLITE_READONLY_CANTLOCK => Some(ErrorCode::ReadOnly(ReadOnlyError::CantLock)),
SQLITE_READONLY_ROLLBACK => Some(ErrorCode::ReadOnly(ReadOnlyError::Rollback)),
SQLITE_READONLY_DBMOVED => Some(ErrorCode::ReadOnly(ReadOnlyError::DbMoved)),
SQLITE_READONLY_CANTINIT => Some(ErrorCode::ReadOnly(ReadOnlyError::CantInit)),
SQLITE_READONLY_DIRECTORY => Some(ErrorCode::ReadOnly(ReadOnlyError::Directory)),
_ => None,
}
}
}
impl fmt::Debug for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let message = unsafe {
let ptr = sqlite3_errstr(self.into_inner());
CStr::from_ptr(ptr).to_str().unwrap_unchecked()
};
f.debug_tuple("Error")
.field(&message)
.field(&self.code)
.finish()
}
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let message = unsafe {
let ptr = sqlite3_errstr(self.into_inner());
CStr::from_ptr(ptr).to_str().unwrap_unchecked()
};
write!(f, "{message}")
}
}
impl Default for Error {
fn default() -> Self {
Self::unknown()
}
}
impl core::error::Error for Error {}
impl From<c_int> for Error {
fn from(value: c_int) -> Self {
Error::new(value).unwrap_or_default()
}
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum ErrorCategory {
#[doc(alias = "SQLITE_ERROR")]
Unknown = SQLITE_ERROR,
#[doc(alias = "SQLITE_INTERNAL")]
Internal = SQLITE_INTERNAL,
#[doc(alias = "SQLITE_PERM")]
Permission = SQLITE_PERM,
#[doc(alias = "SQLITE_ABORT")]
Aborted = SQLITE_ABORT,
#[doc(alias = "SQLITE_BUSY")]
Busy = SQLITE_BUSY,
#[doc(alias = "SQLITE_LOCKED")]
Locked = SQLITE_LOCKED,
#[doc(alias = "SQLITE_NOMEM")]
OutOfMemory = SQLITE_NOMEM,
#[doc(alias = "SQLITE_READONLY")]
ReadOnly = SQLITE_READONLY,
#[doc(alias = "SQLITE_INTERRUPT")]
Interrupt = SQLITE_INTERRUPT,
#[doc(alias = "SQLITE_IOERR")]
Io = SQLITE_IOERR,
#[doc(alias = "SQLITE_CORRUPT")]
Corrupt = SQLITE_CORRUPT,
#[doc(alias = "SQLITE_NOTFOUND")]
NotFound = SQLITE_NOTFOUND,
#[doc(alias = "SQLITE_FULL")]
Full = SQLITE_FULL,
#[doc(alias = "SQLITE_CANTOPEN")]
CantOpen = SQLITE_CANTOPEN,
#[doc(alias = "SQLITE_PROTOCOL")]
Protocol = SQLITE_PROTOCOL,
#[doc(alias = "SQLITE_EMPTY")]
#[deprecated]
Empty = SQLITE_EMPTY,
#[doc(alias = "SQLITE_SCHEMA")]
Schema = SQLITE_SCHEMA,
#[doc(alias = "SQLITE_TOOBIG")]
TooBig = SQLITE_TOOBIG,
#[doc(alias = "SQLITE_CONSTRAINT")]
Constraint = SQLITE_CONSTRAINT,
#[doc(alias = "SQLITE_MISMATCH")]
Mismatch = SQLITE_MISMATCH,
#[doc(alias = "SQLITE_MISUSE")]
Misuse = SQLITE_MISUSE,
#[doc(alias = "SQLITE_NOLFS")]
LargeFile = SQLITE_NOLFS,
#[doc(alias = "SQLITE_AUTH")]
Authorization = SQLITE_AUTH,
#[doc(alias = "SQLITE_FORMAT")]
#[deprecated]
Format = SQLITE_FORMAT,
#[doc(alias = "SQLITE_RANGE")]
Range = SQLITE_RANGE,
#[doc(alias = "SQLITE_NOTADB")]
InvalidDatabase = SQLITE_NOTADB,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
pub enum ErrorCode {
Aborted(AbortError),
Authorization(AuthorizationError),
Busy(BusyError),
CantOpen(CantOpenError),
Constraint(ConstraintError),
Corrupt(CorruptError),
Error(GeneralError),
Io(IoError),
Locked(LockedError),
ReadOnly(ReadOnlyError),
}
impl ErrorCode {
pub fn code(self) -> i32 {
match self {
ErrorCode::Aborted(err) => err as i32,
ErrorCode::Authorization(err) => err as i32,
ErrorCode::Busy(err) => err as i32,
ErrorCode::CantOpen(err) => err as i32,
ErrorCode::Constraint(err) => err as i32,
ErrorCode::Corrupt(err) => err as i32,
ErrorCode::Error(err) => err as i32,
ErrorCode::Io(err) => err as i32,
ErrorCode::Locked(err) => err as i32,
ErrorCode::ReadOnly(err) => err as i32,
}
}
pub fn primary_category(self) -> ErrorCategory {
match self {
ErrorCode::Aborted(_) => ErrorCategory::Aborted,
ErrorCode::Authorization(_) => ErrorCategory::Authorization,
ErrorCode::Busy(_) => ErrorCategory::Busy,
ErrorCode::CantOpen(_) => ErrorCategory::CantOpen,
ErrorCode::Constraint(_) => ErrorCategory::Constraint,
ErrorCode::Corrupt(_) => ErrorCategory::Corrupt,
ErrorCode::Error(_) => ErrorCategory::Unknown,
ErrorCode::Io(_) => ErrorCategory::Io,
ErrorCode::Locked(_) => ErrorCategory::Locked,
ErrorCode::ReadOnly(_) => ErrorCategory::ReadOnly,
}
}
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum AbortError {
#[doc(alias = "SQLITE_ABORT_ROLLBACK")]
Rollback = SQLITE_ABORT_ROLLBACK,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum AuthorizationError {
#[doc(alias = "SQLITE_AUTH_USER")]
User = SQLITE_AUTH_USER,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum BusyError {
#[doc(alias = "SQLITE_BUSY_RECOVERY")]
Recovery = SQLITE_BUSY_RECOVERY,
#[doc(alias = "SQLITE_BUSY_SNAPSHOT")]
Snapshot = SQLITE_BUSY_SNAPSHOT,
#[doc(alias = "SQLITE_BUSY_TIMEOUT")]
Timeout = SQLITE_BUSY_TIMEOUT,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum CantOpenError {
#[doc(alias = "SQLITE_CANTOPEN_FULLPATH")]
FullPath = SQLITE_CANTOPEN_FULLPATH,
#[doc(alias = "SQLITE_CANTOPEN_ISDIR")]
IsDir = SQLITE_CANTOPEN_ISDIR,
#[doc(alias = "SQLITE_CANTOPEN_NOTEMPDIR")]
#[deprecated]
NoTempDir = SQLITE_CANTOPEN_NOTEMPDIR,
#[doc(alias = "SQLITE_CANTOPEN_CONVPATH")]
ConvPath = SQLITE_CANTOPEN_CONVPATH,
#[doc(alias = "SQLITE_CANTOPEN_DIRTYWAL")]
#[deprecated]
DirtyWal = SQLITE_CANTOPEN_DIRTYWAL,
#[doc(alias = "SQLITE_CANTOPEN_SYMLINK")]
Symlink = SQLITE_CANTOPEN_SYMLINK,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum ConstraintError {
#[doc(alias = "SQLITE_CONSTRAINT_CHECK")]
Check = SQLITE_CONSTRAINT_CHECK,
#[doc(alias = "SQLITE_CONSTRAINT_COMMITHOOK")]
CommitHook = SQLITE_CONSTRAINT_COMMITHOOK,
#[doc(alias = "SQLITE_CONSTRAINT_DATATYPE")]
DataType = SQLITE_CONSTRAINT_DATATYPE,
#[doc(alias = "SQLITE_CONSTRAINT_FOREIGNKEY")]
ForeignKey = SQLITE_CONSTRAINT_FOREIGNKEY,
#[doc(alias = "SQLITE_CONSTRAINT_FUNCTION")]
Function = SQLITE_CONSTRAINT_FUNCTION,
#[doc(alias = "SQLITE_CONSTRAINT_NOTNULL")]
NotNull = SQLITE_CONSTRAINT_NOTNULL,
#[doc(alias = "SQLITE_CONSTRAINT_PINNED")]
Pinned = SQLITE_CONSTRAINT_PINNED,
#[doc(alias = "SQLITE_CONSTRAINT_PRIMARYKEY")]
PrimaryKey = SQLITE_CONSTRAINT_PRIMARYKEY,
#[doc(alias = "SQLITE_CONSTRAINT_ROWID")]
RowId = SQLITE_CONSTRAINT_ROWID,
#[doc(alias = "SQLITE_CONSTRAINT_TRIGGER")]
Trigger = SQLITE_CONSTRAINT_TRIGGER,
#[doc(alias = "SQLITE_CONSTRAINT_UNIQUE")]
Unique = SQLITE_CONSTRAINT_UNIQUE,
#[doc(alias = "SQLITE_CONSTRAINT_VTAB")]
VTab = SQLITE_CONSTRAINT_VTAB,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum CorruptError {
#[doc(alias = "SQLITE_CORRUPT_INDEX")]
Index = SQLITE_CORRUPT_INDEX,
#[doc(alias = "SQLITE_CORRUPT_SEQUENCE")]
Sequence = SQLITE_CORRUPT_SEQUENCE,
#[doc(alias = "SQLITE_CORRUPT_VTAB")]
VTab = SQLITE_CORRUPT_VTAB,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum GeneralError {
#[doc(alias = "SQLITE_ERROR_MISSING_COLLSEQ")]
MissingCollSeq = SQLITE_ERROR_MISSING_COLLSEQ,
#[doc(alias = "SQLITE_ERROR_RETRY")]
Retry = SQLITE_ERROR_RETRY,
#[doc(alias = "SQLITE_ERROR_SNAPSHOT")]
Snapshot = SQLITE_ERROR_SNAPSHOT,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum IoError {
#[doc(alias = "SQLITE_IOERR_READ")]
Read = SQLITE_IOERR_READ,
#[doc(alias = "SQLITE_IOERR_WRITE")]
Write = SQLITE_IOERR_WRITE,
#[doc(alias = "SQLITE_IOERR_FSYNC")]
FSync = SQLITE_IOERR_FSYNC,
#[doc(alias = "SQLITE_IOERR_FSTAT")]
FStat = SQLITE_IOERR_FSTAT,
#[doc(alias = "SQLITE_IOERR_TRUNCATE")]
Truncate = SQLITE_IOERR_TRUNCATE,
#[doc(alias = "SQLITE_IOERR_UNLOCK")]
Unlock = SQLITE_IOERR_UNLOCK,
#[doc(alias = "SQLITE_IOERR_RDLOCK")]
ReadLock = SQLITE_IOERR_RDLOCK,
#[doc(alias = "SQLITE_IOERR_DELETE")]
Delete = SQLITE_IOERR_DELETE,
#[doc(alias = "SQLITE_IOERR_BLOCKED")]
#[deprecated]
Blocked = SQLITE_IOERR_BLOCKED,
#[doc(alias = "SQLITE_IOERR_NOMEM")]
NoMem = SQLITE_IOERR_NOMEM,
#[doc(alias = "SQLITE_IOERR_ACCESS")]
Access = SQLITE_IOERR_ACCESS,
#[doc(alias = "SQLITE_IOERR_CHECKRESERVEDLOCK")]
CheckReservedLock = SQLITE_IOERR_CHECKRESERVEDLOCK,
#[doc(alias = "SQLITE_IOERR_LOCK")]
Lock = SQLITE_IOERR_LOCK,
#[doc(alias = "SQLITE_IOERR_CLOSE")]
Close = SQLITE_IOERR_CLOSE,
#[doc(alias = "SQLITE_IOERR_DIR_CLOSE")]
#[deprecated]
DirClose = SQLITE_IOERR_DIR_CLOSE,
#[doc(alias = "SQLITE_IOERR_SHMOPEN")]
ShmOpen = SQLITE_IOERR_SHMOPEN,
#[doc(alias = "SQLITE_IOERR_SHMSIZE")]
ShmSize = SQLITE_IOERR_SHMSIZE,
#[doc(alias = "SQLITE_IOERR_SHMLOCK")]
#[deprecated]
ShmLock = SQLITE_IOERR_SHMLOCK,
#[doc(alias = "SQLITE_IOERR_SHMMAP")]
ShmMap = SQLITE_IOERR_SHMMAP,
#[doc(alias = "SQLITE_IOERR_SEEK")]
Seek = SQLITE_IOERR_SEEK,
#[doc(alias = "SQLITE_IOERR_DELETE_NOENT")]
DeleteNoEnt = SQLITE_IOERR_DELETE_NOENT,
#[doc(alias = "SQLITE_IOERR_MMAP")]
MMap = SQLITE_IOERR_MMAP,
#[doc(alias = "SQLITE_IOERR_GETTEMPPATH")]
GetTempPath = SQLITE_IOERR_GETTEMPPATH,
#[doc(alias = "SQLITE_IOERR_CONVPATH")]
ConvPath = SQLITE_IOERR_CONVPATH,
#[doc(alias = "SQLITE_IOERR_VNODE")]
VNode = SQLITE_IOERR_VNODE,
#[doc(alias = "SQLITE_IOERR_AUTH")]
Auth = SQLITE_IOERR_AUTH,
#[doc(alias = "SQLITE_IOERR_BEGIN_ATOMIC")]
BeginAtomic = SQLITE_IOERR_BEGIN_ATOMIC,
#[doc(alias = "SQLITE_IOERR_COMMIT_ATOMIC")]
CommitAtomic = SQLITE_IOERR_COMMIT_ATOMIC,
#[doc(alias = "SQLITE_IOERR_ROLLBACK_ATOMIC")]
RollbackAtomic = SQLITE_IOERR_ROLLBACK_ATOMIC,
#[doc(alias = "SQLITE_IOERR_DATA")]
Data = SQLITE_IOERR_DATA,
#[doc(alias = "SQLITE_IOERR_CORRUPTFS")]
CorruptFS = SQLITE_IOERR_CORRUPTFS,
#[doc(alias = "SQLITE_IOERR_SHORT_READ")]
ShortRead = SQLITE_IOERR_SHORT_READ,
#[doc(alias = "SQLITE_IOERR_DIR_FSYNC")]
DirFSync = SQLITE_IOERR_DIR_FSYNC,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum LockedError {
#[doc(alias = "SQLITE_LOCKED_SHAREDCACHE")]
SharedCache = SQLITE_LOCKED_SHAREDCACHE,
#[doc(alias = "SQLITE_LOCKED_VTAB")]
VTab = SQLITE_LOCKED_VTAB,
}
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[repr(i32)]
pub enum ReadOnlyError {
#[doc(alias = "SQLITE_READONLY_RECOVERY")]
Recovery = SQLITE_READONLY_RECOVERY,
#[doc(alias = "SQLITE_READONLY_CANTLOCK")]
CantLock = SQLITE_READONLY_CANTLOCK,
#[doc(alias = "SQLITE_READONLY_ROLLBACK")]
Rollback = SQLITE_READONLY_ROLLBACK,
#[doc(alias = "SQLITE_READONLY_DBMOVED")]
DbMoved = SQLITE_READONLY_DBMOVED,
#[doc(alias = "SQLITE_READONLY_CANTINIT")]
CantInit = SQLITE_READONLY_CANTINIT,
#[doc(alias = "SQLITE_READONLY_DIRECTORY")]
Directory = SQLITE_READONLY_DIRECTORY,
}