vector_xlite/
vector_xlite.rs

1use crate::executor::query_executor::QueryExecutor;
2use crate::helper::extension_loaders::*;
3use crate::planner::query_planner::QueryPlanner;
4use crate::types::*;
5use rusqlite::{Connection, Result};
6use std::collections::HashMap;
7use std::sync::Arc;
8
9pub struct VectorXLite {
10    pub conn: Arc<Connection>,
11    pub query_planner: QueryPlanner,
12    pub query_executor: QueryExecutor,
13}
14
15impl VectorXLite {
16    pub fn new(sqlite_connection: Connection) -> Result<VectorXLite> {
17        load_sqlite_vector_extension(&sqlite_connection)?;
18
19        let sqlite_connection = Arc::new(sqlite_connection);
20
21        Ok(VectorXLite {
22            conn: Arc::clone(&sqlite_connection),
23            query_planner: QueryPlanner::new(Arc::clone(&sqlite_connection)),
24            query_executor: QueryExecutor::new(sqlite_connection),
25        })
26    }
27}
28
29impl VectorXLite {
30    pub fn create_collection(&self, collection_config: CollectionConfig) -> Result<()> {
31        let query_plans = self
32            .query_planner
33            .plan_create_collection(collection_config)
34            .unwrap();
35
36        self.query_executor
37            .execute_create_collection_query(query_plans)
38    }
39
40    pub fn insert(&self, create_point: InsertPoint) -> Result<()> {
41        let query_plans = self.query_planner.plan_insert_query(create_point).unwrap();
42
43        self.query_executor.execute_insert_query(query_plans)
44    }
45
46    pub fn search(&self, search_point: SearchPoint) -> Result<Vec<HashMap<String, String>>> {
47        let query_plan = self.query_planner.plan_search_query(search_point);
48
49        let query_plan = match query_plan {
50            Ok(plan) => plan,
51            Err(_) => return Err(rusqlite::Error::InvalidQuery),
52        };
53
54        self.query_executor.execute_search_query(query_plan)
55    }
56}