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 fn query_cipher(&self, table: &str) -> KnowledgeResult<Vec<String>>;
34}
35
36pub trait ToSqlParams<'a, X> {
37 fn to_params(&'a self) -> X;
38}
39pub type ParamT<'a> = (&'a str, &'a dyn ToSql);
40#[derive(Debug)]
41pub struct SqlNamedParam(pub DataField);
42
43impl Display for SqlNamedParam {
44 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45 self.0.fmt(f)
46 }
47}