1pub mod memdb;
2pub mod params;
3pub mod query_util;
4mod stub;
5pub mod thread_clone;
6
7use std::fmt::Display;
8
9use crate::mem::memdb::MDBEnum;
10use crate::mem::memdb::MemDB;
11use crate::mem::stub::StubMDB;
12use enum_dispatch::enum_dispatch;
13use rusqlite::Params;
14use rusqlite::ToSql;
15use wp_error::KnowledgeResult;
16use wp_model_core::model::DataField;
17
18pub type AnyResult<T> = anyhow::Result<T>;
19
20pub type RowData = Vec<DataField>;
21
22#[enum_dispatch]
23pub trait DBQuery {
24 fn query(&self, sql: &str) -> KnowledgeResult<Vec<RowData>>;
25 fn query_row(&self, sql: &str) -> KnowledgeResult<RowData>;
26 fn query_row_params<P: Params>(&self, sql: &str, params: P) -> KnowledgeResult<RowData>;
27 fn query_row_tdos<P: Params>(
28 &self,
29 sql: &str,
30 params: &[DataField; 2],
31 ) -> KnowledgeResult<RowData>;
32}
33
34pub trait ToSqlParams<'a, X> {
35 fn to_params(&'a self) -> X;
36}
37pub type ParamT<'a> = (&'a str, &'a dyn ToSql);
38#[derive(Debug)]
39pub struct SqlNamedParam(pub DataField);
40
41impl Display for SqlNamedParam {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 self.0.fmt(f)
44 }
45}