2021-02-13 23:44:41 +03:00
|
|
|
use crate::StdResult;
|
2021-01-31 13:39:00 +03:00
|
|
|
|
2021-02-15 13:06:09 +03:00
|
|
|
pub trait ToSql {
|
|
|
|
fn to_sql(&self) -> String;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ToSql for &str {
|
|
|
|
fn to_sql(&self) -> String {
|
2021-02-15 23:22:13 +03:00
|
|
|
format!("'{}'", self)
|
2021-02-15 13:06:09 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait TryFromSql<QueryResultRow>: Sized {
|
|
|
|
fn try_from_sql(row: QueryResultRow) -> StdResult<Self>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait DatabaseConnection: Sized {
|
|
|
|
type QueryResultRow;
|
|
|
|
type QueryResult;
|
|
|
|
|
|
|
|
fn open(connection_string: &str) -> StdResult<Self>;
|
|
|
|
|
|
|
|
fn batch_execute(&mut self, query: &str) -> StdResult<()>;
|
|
|
|
|
|
|
|
fn execute<'b>(&mut self, query: &str, params: &'b [&'b dyn ToSql]) -> StdResult<u64>;
|
|
|
|
|
|
|
|
fn query<'b, OutputItem>(
|
|
|
|
&mut self,
|
|
|
|
query: &str,
|
|
|
|
params: &'b [&'b dyn ToSql],
|
|
|
|
) -> StdResult<Vec<OutputItem>>
|
|
|
|
where
|
|
|
|
OutputItem: ?Sized + TryFromSql<Self::QueryResultRow>;
|
|
|
|
}
|