1 #[cfg(all(feature = "bundled", not(feature = "loadable_extension")))]
2 #[test]
auto_ext() -> rusqlite::Result<()>3 fn auto_ext() -> rusqlite::Result<()> {
4 use rusqlite::auto_extension::*;
5 use rusqlite::{ffi, Connection, Error, Result};
6 use std::os::raw::{c_char, c_int};
7
8 fn test_ok(_: Connection) -> Result<()> {
9 Ok(())
10 }
11 unsafe extern "C" fn sqlite_test_ok(
12 db: *mut ffi::sqlite3,
13 pz_err_msg: *mut *mut c_char,
14 _: *const ffi::sqlite3_api_routines,
15 ) -> c_int {
16 init_auto_extension(db, pz_err_msg, test_ok)
17 }
18 fn test_err(_: Connection) -> Result<()> {
19 Err(Error::SqliteFailure(
20 ffi::Error::new(ffi::SQLITE_CORRUPT),
21 Some("AutoExtErr".to_owned()),
22 ))
23 }
24 unsafe extern "C" fn sqlite_test_err(
25 db: *mut ffi::sqlite3,
26 pz_err_msg: *mut *mut c_char,
27 _: *const ffi::sqlite3_api_routines,
28 ) -> c_int {
29 init_auto_extension(db, pz_err_msg, test_err)
30 }
31
32 //assert!(!cancel_auto_extension(sqlite_test_ok));
33 unsafe { register_auto_extension(sqlite_test_ok)? };
34 Connection::open_in_memory()?;
35 assert!(cancel_auto_extension(sqlite_test_ok));
36 assert!(!cancel_auto_extension(sqlite_test_ok));
37 unsafe { register_auto_extension(sqlite_test_err)? };
38 Connection::open_in_memory().unwrap_err();
39 reset_auto_extension();
40 Ok(())
41 }
42