Skip to main content

flyer_orm/
executor.rs

1use anyhow::Result;
2use sqlx::{Encode, FromRow, Pool, Type};
3
4use crate::query::{Pagination, QueryResult, Statement};
5
6#[allow(async_fn_in_trait)]
7pub trait Executor {
8    type T: sqlx::Database;
9
10    async fn new(url: &str) -> Self where Self: Sized;
11
12    fn db<'q>(&'q self) -> &'q Pool<Self::T>; 
13
14    fn to_sql<'q>(&self, statement: &'q Statement<'q, Self::T>) -> Result<String>;
15
16    async fn execute<'q>(&self, sql: &'q str) -> Result<impl QueryResult>;
17
18    async fn insert<'q>(&self, statement: &'q Statement<'q, Self::T>) -> Result<()>;
19
20    async fn update<'q>(&self, statement: &'q Statement<'q, Self::T>) -> Result<()>;
21
22    async fn count<'q>(&self, statement: &'q Statement<'q, Self::T>) -> Result<u64>;
23
24    async fn delete<'q>(&self, statement: &'q Statement<'q, Self::T>) -> Result<()>;
25
26    async fn insert_as<'q, O>(&self, statement: &'q Statement<'q, Self::T>) -> Result<O>
27    where
28        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
29
30    async fn query_all<'q, O, T: 'q + Encode<'q, Self::T> + Type<Self::T>>(&self, sql: &str, args: Vec<T>) -> Result<Vec<O>>
31    where
32        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
33
34    async fn query_one<'q, O, T: 'q + Encode<'q, Self::T> + Type<Self::T>>(&self, sql: &str, args: Vec<T>) -> Result<O>
35    where
36        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
37
38    async fn all<'q, O>(&self, statement: &'q Statement<'q, Self::T>) -> Result<Vec<O>>
39    where
40        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
41
42    async fn first<'q, O>(&self, statement: &'q Statement<'q, Self::T>) -> Result<O>
43    where
44        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
45
46    async fn paginate<'q, O>(&self, statement: &'q Statement<'q, Self::T>) -> Result<Pagination<O>>
47    where
48        O: for<'r> FromRow<'r, <Self::T as sqlx::Database>::Row> + Send + Unpin + Sized;
49}