sqlite_wasm_vec/
lib.rs

1#![doc = include_str!("../README.md")]
2#![no_std]
3
4#[link(name = "wsqlite_vec0")]
5extern "C" {
6    pub fn sqlite3_vec_init();
7}
8
9#[cfg(test)]
10mod tests {
11    use core::ffi::CStr;
12
13    use crate::sqlite3_vec_init;
14    use sqlite_wasm_rs::{
15        sqlite3_auto_extension, sqlite3_close, sqlite3_column_count, sqlite3_column_text,
16        sqlite3_column_type, sqlite3_finalize, sqlite3_open_v2, sqlite3_prepare_v3, sqlite3_step,
17        SQLITE_OK, SQLITE_OPEN_CREATE, SQLITE_OPEN_READWRITE, SQLITE_ROW, SQLITE_TEXT,
18    };
19    use wasm_bindgen_test::wasm_bindgen_test;
20
21    #[wasm_bindgen_test]
22    fn test_auto_extension() {
23        unsafe {
24            sqlite3_auto_extension(Some(core::mem::transmute(sqlite3_vec_init as *const ())));
25        }
26
27        let mut db = core::ptr::null_mut();
28        let ret = unsafe {
29            sqlite3_open_v2(
30                c":memory:".as_ptr().cast(),
31                &mut db as *mut _,
32                SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
33                core::ptr::null(),
34            )
35        };
36        assert_eq!(ret, SQLITE_OK);
37
38        let sql = c"select vec_version();";
39        let mut stmt = core::ptr::null_mut();
40        let ret = unsafe {
41            sqlite3_prepare_v3(
42                db,
43                sql.as_ptr().cast(),
44                -1,
45                0,
46                &mut stmt as *mut _,
47                core::ptr::null_mut(),
48            )
49        };
50        assert_eq!(ret, SQLITE_OK);
51
52        unsafe {
53            assert_eq!(sqlite3_step(stmt), SQLITE_ROW);
54            let count = sqlite3_column_count(stmt);
55            assert_eq!(count, 1);
56            let ty = sqlite3_column_type(stmt, 0);
57            assert_eq!(ty, SQLITE_TEXT);
58            let s = CStr::from_ptr(sqlite3_column_text(stmt, 0).cast())
59                .to_str()
60                .unwrap();
61            assert!(s.starts_with('v'));
62            sqlite3_finalize(stmt);
63        }
64
65        unsafe {
66            sqlite3_close(db);
67        }
68    }
69}