2023-02-13 09:29:49 +08:00
|
|
|
use diesel::{
|
2023-12-23 23:27:15 +08:00
|
|
|
dsl::sql, expression::SqlLiteral, query_dsl::LoadQuery, sql_query, sql_types::SingleValue,
|
|
|
|
Connection, RunQueryDsl, SqliteConnection,
|
2023-02-13 09:29:49 +08:00
|
|
|
};
|
2021-07-19 16:15:20 +08:00
|
|
|
|
2023-11-08 21:48:17 +08:00
|
|
|
use crate::sqlite_impl::errors::*;
|
|
|
|
|
2021-07-19 16:15:20 +08:00
|
|
|
pub trait ConnectionExtension: Connection {
|
2023-12-23 23:27:15 +08:00
|
|
|
fn query<'query, ST, T>(&mut self, query: &str) -> Result<T>
|
2023-02-13 09:29:49 +08:00
|
|
|
where
|
2023-12-23 23:27:15 +08:00
|
|
|
SqlLiteral<ST>: LoadQuery<'query, SqliteConnection, T>,
|
|
|
|
ST: SingleValue;
|
2021-07-19 16:15:20 +08:00
|
|
|
|
2023-12-23 23:27:15 +08:00
|
|
|
fn exec(&mut self, query: impl AsRef<str>) -> Result<usize>;
|
2021-07-19 16:15:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
impl ConnectionExtension for SqliteConnection {
|
2023-12-23 23:27:15 +08:00
|
|
|
fn query<'query, ST, T>(&mut self, query: &str) -> Result<T>
|
2023-02-13 09:29:49 +08:00
|
|
|
where
|
2023-12-23 23:27:15 +08:00
|
|
|
SqlLiteral<ST>: LoadQuery<'query, SqliteConnection, T>,
|
|
|
|
ST: SingleValue,
|
2023-02-13 09:29:49 +08:00
|
|
|
{
|
|
|
|
Ok(sql::<ST>(query).get_result(self)?)
|
|
|
|
}
|
2021-07-19 16:15:20 +08:00
|
|
|
|
2023-12-23 23:27:15 +08:00
|
|
|
fn exec(&mut self, query: impl AsRef<str>) -> Result<usize> {
|
|
|
|
Ok(sql_query(query.as_ref()).execute(self)?)
|
2023-02-13 09:29:49 +08:00
|
|
|
}
|
2021-07-19 16:15:20 +08:00
|
|
|
}
|