Skip to main content

reddb_server/storage/query/engine/registry/
query_registry_impl.rs

1use super::*;
2
3impl QueryEngineRegistry {
4    /// Create empty registry
5    pub fn new() -> Self {
6        Self {
7            factories: HashMap::new(),
8            default_engine: None,
9        }
10    }
11
12    /// Create registry with default in-memory engine
13    pub fn with_default() -> Self {
14        let mut registry = Self::new();
15        registry.register(Box::new(InMemoryEngineFactory));
16        registry.set_default("memory");
17        registry
18    }
19
20    /// Register a factory
21    pub fn register(&mut self, factory: Box<dyn QueryEngineFactory>) {
22        let name = factory.name().to_string();
23        self.factories.insert(name, factory);
24    }
25
26    /// Set default engine
27    pub fn set_default(&mut self, name: &str) {
28        self.default_engine = Some(name.to_string());
29    }
30
31    /// Get engine by name
32    pub fn get(&self, name: &str) -> Option<Box<dyn QueryEngine>> {
33        self.factories.get(name).map(|f| f.create())
34    }
35
36    /// Get default engine
37    pub fn get_default(&self) -> Option<Box<dyn QueryEngine>> {
38        self.default_engine.as_ref().and_then(|name| self.get(name))
39    }
40
41    /// List registered engines
42    pub fn list(&self) -> Vec<&str> {
43        self.factories.keys().map(|s| s.as_str()).collect()
44    }
45}