vector_xlite/
vector_xlite.rs1use 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}