sea_orm/driver/
sqlx_common.rs

1use crate::{ConnAcquireErr, ConnectOptions, DbErr, RuntimeErr};
2
3/// Converts an [sqlx::error] execution error to a [DbErr]
4pub fn sqlx_error_to_exec_err(err: sqlx::Error) -> DbErr {
5    DbErr::Exec(RuntimeErr::SqlxError(err))
6}
7
8/// Converts an [sqlx::error] query error to a [DbErr]
9pub fn sqlx_error_to_query_err(err: sqlx::Error) -> DbErr {
10    DbErr::Query(RuntimeErr::SqlxError(err))
11}
12
13/// Converts an [sqlx::error] connection error to a [DbErr]
14pub fn sqlx_error_to_conn_err(err: sqlx::Error) -> DbErr {
15    DbErr::Conn(RuntimeErr::SqlxError(err))
16}
17
18/// Converts an [sqlx::error] error to a [DbErr]
19pub 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
29/// Converts an [sqlx::error] error to a [DbErr]
30pub 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    /// Convert [ConnectOptions] into [sqlx::pool::PoolOptions]
40    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}