multisql/databases/sled/
mod.rs

1mod auto_increment;
2mod base;
3mod error;
4mod mutable;
5mod util;
6#[cfg(not(feature = "alter-table"))]
7impl crate::AlterTable for SledDatabase {}
8#[cfg(not(feature = "auto-increment"))]
9impl crate::AutoIncrement for SledDatabase {}
10
11use {
12	crate::{DBFull, Database, Error, Result, Schema},
13	error::err_into,
14	sled::{self, Config, Db},
15	std::convert::TryFrom,
16};
17
18#[derive(Debug, Clone)]
19pub struct SledDatabase {
20	tree: Db,
21}
22impl DBFull for SledDatabase {}
23impl SledDatabase {
24	pub fn new(filename: &str) -> Result<Self> {
25		let tree = sled::open(filename).map_err(err_into)?;
26		Ok(Self { tree })
27	}
28}
29
30impl Database {
31	pub fn new_sled(sled: SledDatabase) -> Self {
32		Self::new(Box::new(sled))
33	}
34}
35
36impl TryFrom<Config> for SledDatabase {
37	type Error = Error;
38
39	fn try_from(config: Config) -> Result<Self> {
40		let tree = config.open().map_err(err_into)?;
41
42		Ok(Self { tree })
43	}
44}
45
46fn fetch_schema(tree: &Db, table_name: &str) -> Result<(String, Option<Schema>)> {
47	let key = format!("schema/{}", table_name);
48	let value = tree.get(&key.as_bytes()).map_err(err_into)?;
49	let schema = value
50		.map(|v| bincode::deserialize(&v))
51		.transpose()
52		.map_err(err_into)?;
53
54	Ok((key, schema))
55}