mirror of
https://github.com/isar/rusqlite.git
synced 2025-08-19 12:29:34 +08:00
Add Connection::extension_init2
This commit is contained in:
@@ -7459,49 +7459,23 @@ pub unsafe fn sqlite3_is_interrupted(arg1: *mut sqlite3) -> ::std::os::raw::c_in
|
||||
(fun)(arg1)
|
||||
}
|
||||
|
||||
/// Loadable extension initialization error
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
#[non_exhaustive]
|
||||
pub enum InitError {
|
||||
/// Invalid sqlite3_api_routines pointer
|
||||
NullApiPointer,
|
||||
/// Version mismatch between the extension and the SQLite3 library
|
||||
VersionMismatch { compile_time: i32, runtime: i32 },
|
||||
/// Invalid function pointer in one of sqlite3_api_routines fields
|
||||
NullFunctionPointer,
|
||||
}
|
||||
impl ::std::fmt::Display for InitError {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||
match *self {
|
||||
InitError::NullApiPointer => {
|
||||
write!(f, "Invalid sqlite3_api_routines pointer")
|
||||
}
|
||||
InitError::VersionMismatch { compile_time, runtime } => {
|
||||
write!(f, "SQLite version mismatch: {runtime} < {compile_time}")
|
||||
}
|
||||
InitError::NullFunctionPointer => {
|
||||
write!(f, "Some sqlite3_api_routines fields are null")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/// Like SQLITE_EXTENSION_INIT2 macro
|
||||
pub unsafe fn rusqlite_extension_init2(
|
||||
p_api: *mut sqlite3_api_routines,
|
||||
) -> ::std::result::Result<(), InitError> {
|
||||
) -> ::std::result::Result<(), crate::InitError> {
|
||||
if p_api.is_null() {
|
||||
return Err(InitError::NullApiPointer);
|
||||
return Err(crate::InitError::NullApiPointer);
|
||||
}
|
||||
if let Some(fun) = (*p_api).libversion_number {
|
||||
let version = fun();
|
||||
if SQLITE_VERSION_NUMBER > version {
|
||||
return Err(InitError::VersionMismatch {
|
||||
return Err(crate::InitError::VersionMismatch {
|
||||
compile_time: SQLITE_VERSION_NUMBER,
|
||||
runtime: version,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return Err(InitError::NullFunctionPointer);
|
||||
return Err(crate::InitError::NullFunctionPointer);
|
||||
}
|
||||
__SQLITE3_AGGREGATE_CONTEXT
|
||||
.store((*p_api).aggregate_context, ::atomic::Ordering::Release);
|
||||
|
Reference in New Issue
Block a user