mod db_pool;
mod pool_impl;
mod session;
#[cfg(feature = "duckdb")]
pub mod duckdb_conn;
use crate::foundation::DbConfig;
pub use db_pool::{DatabaseConnection, DbConnection, DbPool, PoolStatus};
pub use session::Session;
#[cfg(feature = "duckdb")]
pub use duckdb_conn::{DuckDbConnection, DuckDbExecResult, DuckDbRow};
#[cfg(feature = "migration")]
pub(crate) use crate::database::MigrationExecutor;
#[cfg(feature = "metrics")]
use crate::observability::MetricsCollectorTrait;
pub use sea_orm::{ConnectionTrait, TransactionTrait};
use crate::foundation::DbResult;
use async_trait::async_trait;
use sea_orm::ExecResult;
#[cfg(any(feature = "metrics", feature = "cache"))]
use std::sync::Arc;
#[cfg(feature = "cache")]
use oxcache::Cache;
#[async_trait]
pub trait ConnectionPool: Send + Sync {
async fn get_session(&self, role: &str) -> DbResult<Session>;
fn status(&self) -> PoolStatus;
fn config(&self) -> &DbConfig;
}
#[async_trait]
pub trait DatabaseSession: Send + Sync {
async fn execute(&self, sql: &str) -> DbResult<ExecResult>;
async fn execute_raw(&self, sql: &str) -> DbResult<ExecResult>;
async fn execute_raw_ddl(&self, sql: &str) -> DbResult<ExecResult>;
async fn begin_transaction(&self) -> DbResult<()>;
async fn commit(&self) -> DbResult<()>;
async fn rollback(&self) -> DbResult<()>;
fn role(&self) -> &str;
async fn is_in_transaction(&self) -> bool;
}
#[cfg(feature = "permission")]
use crate::access::PermissionConfig;
#[derive(Clone, Default)]
pub struct DbPoolBuilder {
url: Option<String>,
config: Option<DbConfig>,
#[cfg(feature = "metrics")]
metrics_collector: Option<Arc<dyn MetricsCollectorTrait>>,
#[cfg(feature = "permission")]
permission_config: Option<PermissionConfig>,
admin_role: Option<String>,
#[cfg(feature = "cache")]
cache: Option<Arc<Cache<String, serde_json::Value>>>,
}