use crate::dict::Dict;
use crate::low_level::LowLevel;
use crate::types::BoringResult;
use std::path::PathBuf;
use std::sync::Arc;
pub struct Database {
low_level: Arc<LowLevel>,
}
impl Database {
pub fn open(path: impl Into<PathBuf>) -> BoringResult<Self> {
let low_level: LowLevel = LowLevel::open(path)?;
Ok(Self {
low_level: Arc::new(low_level),
})
}
pub fn open_dict(&self, name: &str) -> BoringResult<Dict> {
self.low_level.transaction(|transaction| {
transaction.execute(
&format!(
"create table if not exists {} (key BLOB PRIMARY KEY, value BLOB NOT NULL)",
name
),
[],
)?;
transaction.commit()?;
Ok(())
})?;
Ok(Dict::new(self.low_level.clone(), name))
}
}