velesdb_core/database/
metadata_ops.rs1use crate::collection::MetadataCollection;
4use crate::{CollectionType, Result};
5
6use super::Database;
7
8impl Database {
9 pub fn create_metadata_collection(&self, name: &str) -> Result<()> {
15 self.ensure_collection_name_available(name)?;
16 let path = self.data_dir.join(name);
17 let coll = MetadataCollection::create(path, name)?;
18 self.metadata_colls.write().insert(name.to_string(), coll);
19
20 if let Some(ref obs) = self.observer {
21 obs.on_collection_created(name, &CollectionType::MetadataOnly);
22 }
23
24 self.schema_version
25 .fetch_add(1, std::sync::atomic::Ordering::Relaxed);
26
27 Ok(())
28 }
29
30 #[must_use]
38 pub fn get_metadata_collection(&self, name: &str) -> Option<MetadataCollection> {
39 if let Some(c) = self.metadata_colls.read().get(name).cloned() {
40 return Some(c);
41 }
42 self.open_metadata_collection_from_disk(name)
43 }
44
45 fn open_metadata_collection_from_disk(&self, name: &str) -> Option<MetadataCollection> {
47 let cfg = self.read_collection_config(name)?;
48 if !cfg.metadata_only {
49 return None;
50 }
51 let coll = MetadataCollection::open(self.data_dir.join(name)).ok()?;
52 self.metadata_colls
53 .write()
54 .insert(name.to_string(), coll.clone());
55 Some(coll)
56 }
57}