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