veclite-db 1.1.1

SQLite for vectors — embedded AI memory engine
Documentation
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();

        // 1. Insert a document
        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()
            }
        );

        // 2. Search for the document
        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");
        }
    }
}