Skip to main content

veclite_db/
lib.rs

1pub use veclite_core::*;
2pub use veclite_sql::QueryResult;
3
4pub trait VecLiteExt {
5    fn query(&mut self, query: &str) -> std::result::Result<QueryResult, String>;
6}
7
8impl VecLiteExt for VecLite {
9    fn query(&mut self, query: &str) -> std::result::Result<QueryResult, String> {
10        veclite_sql::execute_query(self, query)
11    }
12}
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17    use tempfile::NamedTempFile;
18
19    #[test]
20    fn test_sql_query() {
21        let temp_file = NamedTempFile::new().unwrap();
22        let path = temp_file.path();
23
24        let mut db = VecLite::open(path).unwrap();
25
26        // 1. Insert a document
27        let insert_res = db
28            .query("INSERT INTO memory VALUES ('doc_1', '[0.1, 0.2, 0.3]')")
29            .unwrap();
30        assert_eq!(
31            insert_res,
32            QueryResult::Inserted {
33                id: "doc_1".to_string()
34            }
35        );
36
37        // 2. Search for the document
38        let search_res = db
39            .query("SELECT * FROM memory ORDER BY vector <=> '[0.1, 0.25, 0.3]' LIMIT 1")
40            .unwrap();
41
42        if let QueryResult::Rows(rows) = search_res {
43            assert_eq!(rows.len(), 1);
44            assert_eq!(rows[0].0, "doc_1");
45        } else {
46            panic!("Expected Rows result");
47        }
48    }
49}