#[cfg(feature = "sea-orm")]
pub use axa_seaorm::truncate_table;
#[cfg(not(axa_db = "none"))]
use crate::Result;
#[cfg(any(
feature = "sea-orm",
feature = "sqlx",
feature = "diesel",
feature = "toasty"
))]
use crate::config::Database;
#[cfg(feature = "sea-orm")]
impl From<&Database> for axa_seaorm::PoolConfig {
fn from(config: &Database) -> Self {
Self {
uri: config.uri.clone(),
min_connections: config.min_connections,
max_connections: config.max_connections,
connect_timeout_ms: config.connect_timeout,
idle_timeout_ms: config.idle_timeout,
enable_logging: config.enable_logging,
}
}
}
#[cfg(feature = "sqlx")]
impl From<&Database> for axa_sqlx::PoolConfig {
fn from(config: &Database) -> Self {
Self {
uri: config.uri.clone(),
min_connections: config.min_connections,
max_connections: config.max_connections,
connect_timeout_ms: config.connect_timeout,
idle_timeout_ms: config.idle_timeout,
}
}
}
#[cfg(feature = "diesel")]
impl From<&Database> for axa_diesel::PoolConfig {
fn from(config: &Database) -> Self {
Self {
uri: config.uri.clone(),
max_connections: usize::try_from(config.max_connections).unwrap_or(usize::MAX),
wait_timeout: std::time::Duration::from_millis(config.connect_timeout),
}
}
}
#[cfg(feature = "toasty")]
impl From<&Database> for axa_toasty::PoolConfig {
fn from(config: &Database) -> Self {
Self {
uri: config.uri.clone(),
max_connections: config.max_connections,
connect_timeout_ms: config.connect_timeout,
idle_timeout_ms: config.idle_timeout,
}
}
}
#[cfg(any(axa_db = "sqlx", axa_db = "seaorm", axa_db = "diesel"))]
pub async fn connect(config: &Database) -> Result<crate::context::Db> {
#[cfg(axa_db = "sqlx")]
let db = axa_sqlx::connect(&config.into()).await?;
#[cfg(axa_db = "seaorm")]
let db = axa_seaorm::connect(&config.into()).await?;
#[cfg(axa_db = "diesel")]
let db = axa_diesel::connect(&config.into()).await?;
Ok(db)
}
#[cfg(axa_db = "toasty")]
pub async fn connect(
config: &Database,
models: axa_toasty::toasty::ModelSet,
) -> Result<crate::context::Db> {
Ok(axa_toasty::connect(&config.into(), models).await?)
}
#[cfg(all(test, feature = "sqlx"))]
mod debug_tests {
#[tokio::test]
async fn a_pools_debug_text_holds_no_password() {
let pool = sqlx::PgPool::connect_lazy("postgres://me:hunter2@db.internal/app").unwrap();
let printed = format!("{pool:?}");
assert!(!printed.contains("hunter2"), "{printed}");
}
}