#[cfg(not(feature = "redis"))]
use crate::cache::no_cache::NoCache;
#[cfg(feature = "redis")]
use crate::cache::redis::RedisCache;
use crate::{cache::Cache, config::Configuration};
pub use rusqlite::{Connection, Result};
#[derive(Clone)]
pub struct DataManager<T: Clone + Configuration>(
pub T,
#[cfg(feature = "redis")] pub RedisCache,
#[cfg(not(feature = "redis"))] pub NoCache,
);
impl<T: Clone + Configuration> DataManager<T> {
pub async fn connect(&self) -> Result<Connection> {
Connection::open(&self.0.db_config().name)
}
pub async fn new(config: T) -> Result<Self> {
let this = Self(
config.clone(),
#[cfg(feature = "redis")]
RedisCache::new().await,
#[cfg(not(feature = "redis"))]
NoCache::new().await,
);
let conn = this.connect().await?;
conn.pragma_update(None, "journal_mode", "WAL").unwrap();
Ok(this)
}
}
#[macro_export]
macro_rules! sqlite_get {
($row:ident->$idx:literal($t:ty)) => {
$row.get::<usize, $t>($idx).unwrap()
};
($row:ident->$idx:literal($t:ty) default ($default:expr)) => {
$row.get::<usize, $t>($idx).unwrap_or($default)
};
($row:ident->$idx:ident($t:ty)) => {
$row.get::<usize, $t>($idx).unwrap()
};
($row:ident->$idx:ident($t:ty) default ($default:expr)) => {
$row.get::<usize, $t>($idx).unwrap_or($default)
};
}
#[macro_export]
macro_rules! sqlite_query_row {
($conn:expr, $sql:expr, $params:expr, $f:expr) => {{
let mut query = $conn.prepare($sql).unwrap();
query.query_row($params, $f)
}};
}
#[macro_export]
macro_rules! sqlite_query_rows {
($conn:expr, $sql:expr, $params:expr, $f:expr) => {{
let mut query = $conn.prepare($sql).unwrap();
if let Ok(mut rows) = query.query($params) {
let mut out = Vec::new();
while let Some(row) = rows.next().unwrap() {
out.push($f(&row));
}
Ok(out)
} else {
Err(Error::Unknown)
}
}};
}
#[macro_export]
macro_rules! sqlite_execute {
($conn:expr, $sql:expr, $params:expr) => {
$conn.prepare($sql).unwrap().execute($params)
};
($conn:expr, $sql:expr) => {
$conn.prepare($sql).unwrap().execute(())
};
}
#[macro_export]
macro_rules! sqlite_params {
() => {
$crate::rparams![]
};
($($params:expr),+ $(,)?) => {
$crate::rparams![$($params),+]
};
}