use crate::vector::error::{VectorError, VectorResult};
pub fn register_vector_extension(conn: &rusqlite::Connection) -> VectorResult<()> {
sqlite_vector_rs::register(conn).map_err(|e| VectorError::Driver(e.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
fn vector_lib_available() -> bool {
std::env::var_os("SQLITE_VECTOR_RS_LIB").is_some()
}
#[test]
fn test_register_on_fresh_connection() {
if !vector_lib_available() {
eprintln!("skipping: SQLITE_VECTOR_RS_LIB not set");
return;
}
let conn = rusqlite::Connection::open_in_memory().unwrap();
let result = register_vector_extension(&conn);
assert!(result.is_ok(), "register failed: {:?}", result.err());
}
#[test]
fn test_vector_from_json_available_after_register() {
if !vector_lib_available() {
eprintln!("skipping: SQLITE_VECTOR_RS_LIB not set");
return;
}
let conn = rusqlite::Connection::open_in_memory().unwrap();
register_vector_extension(&conn).unwrap();
let dims: i64 = conn
.query_row(
"SELECT vector_dims(vector_from_json('[1.0, 2.0, 3.0]', 'float4'), 'float4')",
[],
|row| row.get(0),
)
.unwrap();
assert_eq!(dims, 3);
}
}