Skip to content

Commit fb7bc79

Browse files
committed
test for manually loading an extension
1 parent 094d13f commit fb7bc79

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

tests/test_manual_load.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use sqlite_loadable::prelude::*;
2+
use sqlite_loadable::{api, define_scalar_function, Result};
3+
4+
pub fn add(context: *mut sqlite3_context, values: &[*mut sqlite3_value]) -> Result<()> {
5+
let a = api::value_int(&values[0]);
6+
let b = api::value_int(&values[1]);
7+
api::result_int(context, a + b);
8+
Ok(())
9+
}
10+
11+
#[sqlite_entrypoint]
12+
pub fn sqlite3_manual_init(db: *mut sqlite3) -> Result<()> {
13+
define_scalar_function(db, "addx", 2, add, FunctionFlags::empty())?;
14+
Ok(())
15+
}
16+
17+
#[cfg(test)]
18+
mod tests {
19+
use super::*;
20+
21+
use rusqlite::Connection;
22+
23+
#[test]
24+
fn test_manual_load() {
25+
let db = Connection::open_in_memory().unwrap();
26+
unsafe {
27+
sqlite3_manual_init(
28+
std::mem::transmute(db.handle()),
29+
std::ptr::null_mut(),
30+
std::ptr::null_mut(),
31+
);
32+
}
33+
34+
let result: i32 = db
35+
.query_row("select addx(?1, ?2)", [1, 2], |x| x.get(0))
36+
.unwrap();
37+
38+
assert_eq!(result, 3);
39+
}
40+
}

0 commit comments

Comments
 (0)