pub use veclite_core::*;
pub use veclite_sql::QueryResult;
pub trait VecLiteExt {
fn query(&mut self, query: &str) -> std::result::Result<QueryResult, String>;
}
impl VecLiteExt for VecLite {
fn query(&mut self, query: &str) -> std::result::Result<QueryResult, String> {
veclite_sql::execute_query(self, query)
}
}
#[cfg(test)]
mod tests {
use super::*;
use tempfile::NamedTempFile;
#[test]
fn test_sql_query() {
let temp_file = NamedTempFile::new().unwrap();
let path = temp_file.path();
let mut db = VecLite::open(path).unwrap();
let insert_res = db
.query("INSERT INTO memory VALUES ('doc_1', '[0.1, 0.2, 0.3]')")
.unwrap();
assert_eq!(
insert_res,
QueryResult::Inserted {
id: "doc_1".to_string()
}
);
let search_res = db
.query("SELECT * FROM memory ORDER BY vector <=> '[0.1, 0.25, 0.3]' LIMIT 1")
.unwrap();
if let QueryResult::Rows(rows) = search_res {
assert_eq!(rows.len(), 1);
assert_eq!(rows[0].0, "doc_1");
} else {
panic!("Expected Rows result");
}
}
}