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}