velesdb_core/database/
graph_ops.rs1use crate::collection::GraphCollection;
4use crate::{CollectionType, DistanceMetric, Result};
5
6use super::Database;
7
8#[allow(deprecated)]
9impl Database {
10 #[allow(clippy::needless_pass_by_value)] pub fn create_graph_collection(
17 &self,
18 name: &str,
19 schema: crate::collection::GraphSchema,
20 ) -> Result<()> {
21 self.ensure_collection_name_available(name)?;
22 let path = self.data_dir.join(name);
23 let coll =
24 GraphCollection::create(path, name, None, DistanceMetric::Cosine, schema.clone())?;
25 self.register_graph_collection(name, &coll, None, DistanceMetric::Cosine, &schema);
26 Ok(())
27 }
28
29 #[allow(clippy::needless_pass_by_value)] pub fn create_graph_collection_with_embeddings(
40 &self,
41 name: &str,
42 schema: crate::collection::GraphSchema,
43 dimension: usize,
44 metric: DistanceMetric,
45 ) -> Result<()> {
46 self.ensure_collection_name_available(name)?;
47 let path = self.data_dir.join(name);
48 let coll = GraphCollection::create(path, name, Some(dimension), metric, schema.clone())?;
49 self.register_graph_collection(name, &coll, Some(dimension), metric, &schema);
50 Ok(())
51 }
52
53 pub(super) fn create_graph_collection_from_type(
55 &self,
56 name: &str,
57 dimension: Option<usize>,
58 metric: DistanceMetric,
59 schema: &crate::collection::GraphSchema,
60 ) -> Result<()> {
61 self.ensure_collection_name_available(name)?;
62 let path = self.data_dir.join(name);
63 let coll = GraphCollection::create(path, name, dimension, metric, schema.clone())?;
64 self.register_graph_collection(name, &coll, dimension, metric, schema);
65 Ok(())
66 }
67
68 fn register_graph_collection(
71 &self,
72 name: &str,
73 coll: &GraphCollection,
74 dimension: Option<usize>,
75 metric: DistanceMetric,
76 schema: &crate::collection::GraphSchema,
77 ) {
78 self.collections
79 .write()
80 .insert(name.to_string(), coll.inner.clone());
81 self.graph_colls
82 .write()
83 .insert(name.to_string(), coll.clone());
84
85 if let Some(ref obs) = self.observer {
86 let kind = CollectionType::Graph {
87 dimension,
88 metric,
89 schema: schema.clone(),
90 };
91 obs.on_collection_created(name, &kind);
92 }
93
94 self.schema_version
95 .fetch_add(1, std::sync::atomic::Ordering::Relaxed);
96 }
97
98 #[must_use]
107 pub fn get_graph_collection(&self, name: &str) -> Option<GraphCollection> {
108 if let Some(c) = self.graph_colls.read().get(name).cloned() {
109 return Some(c);
110 }
111 self.open_graph_collection_from_disk(name)
112 }
113
114 fn open_graph_collection_from_disk(&self, name: &str) -> Option<GraphCollection> {
116 let cfg = self.read_collection_config(name)?;
117 cfg.graph_schema.as_ref()?;
118 let coll = GraphCollection::open(self.data_dir.join(name)).ok()?;
119 self.graph_colls
120 .write()
121 .insert(name.to_string(), coll.clone());
122 Some(coll)
123 }
124}