Add multi-database data layer

Introduce aether-data-schema and driver-specific schema generation for Postgres, MySQL, and SQLite.

Split data backends, lifecycle, repositories, and gateway runtime integration across database drivers.

Verified with cargo fmt --all --check, cargo clippy --workspace --all-targets -- -D warnings, and cargo test --workspace.
This commit is contained in:
fawney19
2026-05-05 18:27:36 +08:00
parent 099653f732
commit fce7e959e5
372 changed files with 86217 additions and 21160 deletions

View File

@@ -3,7 +3,7 @@ use tracing::warn;
use crate::data::GatewayDataState;
use super::{postgres_error, system_config_bool, DB_MAINTENANCE_TABLES};
use super::{system_config_bool, DB_MAINTENANCE_TABLES};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(super) struct DbMaintenanceRunSummary {
@@ -14,25 +14,25 @@ pub(super) struct DbMaintenanceRunSummary {
pub(super) async fn perform_db_maintenance_once(
data: &GatewayDataState,
) -> Result<DbMaintenanceRunSummary, DataLayerError> {
let Some(pool) = data.postgres_pool() else {
if !data.has_database_maintenance_backend() {
return Ok(DbMaintenanceRunSummary {
attempted: 0,
succeeded: 0,
});
};
}
run_db_maintenance_with(data, |table_name| {
let pool = pool.clone();
async move {
let statement = format!("VACUUM ANALYZE {table_name}");
sqlx::raw_sql(&statement)
.execute(&pool)
.await
.map_err(postgres_error)?;
Ok(())
}
if !system_config_bool(data, "enable_db_maintenance", true).await? {
return Ok(DbMaintenanceRunSummary {
attempted: 0,
succeeded: 0,
});
}
let summary = data.run_database_maintenance(DB_MAINTENANCE_TABLES).await?;
Ok(DbMaintenanceRunSummary {
attempted: summary.attempted,
succeeded: summary.succeeded,
})
.await
}
pub(super) async fn run_db_maintenance_with<F, Fut>(