1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use crate::{
DatabaseTransaction, DbBackend, DbErr, ExecResult, QueryResult, Statement, TransactionError,
};
use futures::Stream;
use std::{future::Future, pin::Pin};
#[async_trait::async_trait]
pub trait ConnectionTrait<'a>: Sync {
type Stream: Stream<Item = Result<QueryResult, DbErr>>;
fn get_database_backend(&self) -> DbBackend;
async fn execute(&self, stmt: Statement) -> Result<ExecResult, DbErr>;
async fn query_one(&self, stmt: Statement) -> Result<Option<QueryResult>, DbErr>;
async fn query_all(&self, stmt: Statement) -> Result<Vec<QueryResult>, DbErr>;
fn stream(
&'a self,
stmt: Statement,
) -> Pin<Box<dyn Future<Output = Result<Self::Stream, DbErr>> + 'a>>;
async fn begin(&self) -> Result<DatabaseTransaction, DbErr>;
async fn transaction<F, T, E>(&self, callback: F) -> Result<T, TransactionError<E>>
where
F: for<'c> FnOnce(
&'c DatabaseTransaction,
) -> Pin<Box<dyn Future<Output = Result<T, E>> + Send + 'c>>
+ Send,
T: Send,
E: std::error::Error + Send;
fn support_returning(&self) -> bool {
let db_backend = self.get_database_backend();
db_backend.support_returning()
}
fn is_mock_connection(&self) -> bool {
false
}
}