sea_orm/driver/
sqlx_common.rs1use crate::{ConnAcquireErr, ConnectOptions, DbErr, RuntimeErr};
2
3pub fn sqlx_error_to_exec_err(err: sqlx::Error) -> DbErr {
5 DbErr::Exec(RuntimeErr::SqlxError(err))
6}
7
8pub fn sqlx_error_to_query_err(err: sqlx::Error) -> DbErr {
10 DbErr::Query(RuntimeErr::SqlxError(err))
11}
12
13pub fn sqlx_error_to_conn_err(err: sqlx::Error) -> DbErr {
15 DbErr::Conn(RuntimeErr::SqlxError(err))
16}
17
18pub fn sqlx_map_err_ignore_not_found<T: std::fmt::Debug>(
20 err: Result<Option<T>, sqlx::Error>,
21) -> Result<Option<T>, DbErr> {
22 if let Err(sqlx::Error::RowNotFound) = err {
23 Ok(None)
24 } else {
25 err.map_err(sqlx_error_to_query_err)
26 }
27}
28
29pub fn sqlx_conn_acquire_err(sqlx_err: sqlx::Error) -> DbErr {
31 match sqlx_err {
32 sqlx::Error::PoolTimedOut => DbErr::ConnectionAcquire(ConnAcquireErr::Timeout),
33 sqlx::Error::PoolClosed => DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed),
34 _ => DbErr::Conn(RuntimeErr::SqlxError(sqlx_err)),
35 }
36}
37
38impl ConnectOptions {
39 pub fn sqlx_pool_options<DB>(self) -> sqlx::pool::PoolOptions<DB>
41 where
42 DB: sqlx::Database,
43 {
44 let mut opt = sqlx::pool::PoolOptions::new();
45 if let Some(max_connections) = self.max_connections {
46 opt = opt.max_connections(max_connections);
47 }
48 if let Some(min_connections) = self.min_connections {
49 opt = opt.min_connections(min_connections);
50 }
51 if let Some(connect_timeout) = self.connect_timeout {
52 opt = opt.acquire_timeout(connect_timeout);
53 }
54 if let Some(idle_timeout) = self.idle_timeout {
55 opt = opt.idle_timeout(Some(idle_timeout));
56 }
57 if let Some(acquire_timeout) = self.acquire_timeout {
58 opt = opt.acquire_timeout(acquire_timeout);
59 }
60 if let Some(max_lifetime) = self.max_lifetime {
61 opt = opt.max_lifetime(Some(max_lifetime));
62 }
63 opt = opt.test_before_acquire(self.test_before_acquire);
64 opt
65 }
66}