AppFlowy/frontend/rust-lib/flowy-sqlite/src/sqlite/database.rs

54 lines
1.2 KiB
Rust
Raw Normal View History

use crate::sqlite::{
errors::*,
2021-07-09 15:31:44 +00:00
pool::{ConnectionManager, ConnectionPool, PoolConfig},
};
use r2d2::PooledConnection;
2021-08-31 15:01:46 +00:00
use std::sync::Arc;
pub struct Database {
uri: String,
2021-08-31 15:01:46 +00:00
pool: Arc<ConnectionPool>,
}
2021-07-09 15:31:44 +00:00
pub type DBConnection = PooledConnection<ConnectionManager>;
impl Database {
pub fn new(dir: &str, name: &str, pool_config: PoolConfig) -> Result<Self> {
let uri = db_file_uri(dir, name);
if !std::path::PathBuf::from(dir).exists() {
tracing::error!("Create database failed. {} not exists", &dir);
}
let pool = ConnectionPool::new(pool_config, &uri)?;
Ok(Self {
uri,
pool: Arc::new(pool),
})
}
2022-01-23 04:14:00 +00:00
pub fn get_uri(&self) -> &str {
&self.uri
}
2021-07-09 15:31:44 +00:00
pub fn get_connection(&self) -> Result<DBConnection> {
let conn = self.pool.get()?;
Ok(conn)
}
2021-08-31 15:01:46 +00:00
2022-01-23 04:14:00 +00:00
pub fn get_pool(&self) -> Arc<ConnectionPool> {
self.pool.clone()
}
}
pub fn db_file_uri(dir: &str, name: &str) -> String {
use std::path::MAIN_SEPARATOR;
let mut uri = dir.to_owned();
if !uri.ends_with(MAIN_SEPARATOR) {
uri.push(MAIN_SEPARATOR);
}
uri.push_str(name);
uri
}