| #[cfg(all(feature = "bundled", not(feature = "loadable_extension")))] |
| #[test] |
| fn auto_ext() -> rusqlite::Result<()> { |
| use rusqlite::auto_extension::*; |
| use rusqlite::{ffi, Connection, Error, Result}; |
| use std::os::raw::{c_char, c_int}; |
| |
| fn test_ok(_: Connection) -> Result<()> { |
| Ok(()) |
| } |
| unsafe extern "C" fn sqlite_test_ok( |
| db: *mut ffi::sqlite3, |
| pz_err_msg: *mut *mut c_char, |
| _: *const ffi::sqlite3_api_routines, |
| ) -> c_int { |
| init_auto_extension(db, pz_err_msg, test_ok) |
| } |
| fn test_err(_: Connection) -> Result<()> { |
| Err(Error::SqliteFailure( |
| ffi::Error::new(ffi::SQLITE_CORRUPT), |
| Some("AutoExtErr".to_owned()), |
| )) |
| } |
| unsafe extern "C" fn sqlite_test_err( |
| db: *mut ffi::sqlite3, |
| pz_err_msg: *mut *mut c_char, |
| _: *const ffi::sqlite3_api_routines, |
| ) -> c_int { |
| init_auto_extension(db, pz_err_msg, test_err) |
| } |
| |
| //assert!(!cancel_auto_extension(sqlite_test_ok)); |
| unsafe { register_auto_extension(sqlite_test_ok)? }; |
| Connection::open_in_memory()?; |
| assert!(cancel_auto_extension(sqlite_test_ok)); |
| assert!(!cancel_auto_extension(sqlite_test_ok)); |
| unsafe { register_auto_extension(sqlite_test_err)? }; |
| Connection::open_in_memory().unwrap_err(); |
| reset_auto_extension(); |
| Ok(()) |
| } |