use std::time::Duration;
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use super::error::DbError;
async fn connect_async(url: &str) -> Result<DatabaseConnection, DbError> {
let mut opts = ConnectOptions::new(url);
opts.max_connections(100)
.min_connections(5)
.connect_timeout(Duration::from_secs(8))
.acquire_timeout(Duration::from_secs(8))
.idle_timeout(Duration::from_secs(8))
.max_lifetime(Duration::from_secs(8))
.sqlx_logging(false);
Database::connect(opts).await.map_err(DbError::from)
}
pub fn connect(url: &str) -> Result<DatabaseConnection, DbError> {
crate::runtime::block_on(connect_async(url))
}
async fn connect_test_async() -> Result<DatabaseConnection, DbError> {
connect_async("sqlite::memory:").await
}
pub fn connect_test() -> Result<DatabaseConnection, DbError> {
crate::runtime::block_on(connect_test_async())
}
#[cfg(test)]
mod tests {
use sea_orm::DbBackend;
use super::connect_test;
#[test]
fn connect_test_creates_in_memory_sqlite_connection() {
let db = connect_test().expect("connect_test should create an in-memory sqlite database");
assert_eq!(db.get_database_backend(), DbBackend::Sqlite);
crate::runtime::block_on(db.ping())
.expect("in-memory sqlite database should respond to ping");
}
}