use super::super::assemble::attach;
use super::super::model::Schema;
use super::super::queries;
use super::{fetch, group, rows};
use crate::database::migrations::CustomMigrationError;
pub(super) async fn attach_all(
pool: &sqlx::PgPool,
schema: &mut Schema,
schema_name: &str,
) -> Result<(), CustomMigrationError> {
let keys = fetch(pool, queries::PRIMARY_KEYS, schema_name).await?;
attach::primary_keys(
schema,
keys.iter()
.map(|row| {
(
rows::text(row, "table_name"),
rows::text(row, "column_name"),
)
})
.collect(),
);
let views = fetch(pool, queries::VIEWS, schema_name).await?;
attach::views(
schema,
views
.iter()
.map(|row| rows::text(row, "table_name"))
.collect(),
);
let uniques = fetch(pool, queries::UNIQUES, schema_name).await?;
attach::uniques(schema, group::constraints(uniques));
let indexes = fetch(pool, queries::INDEXES, schema_name).await?;
attach::indexes(schema, group::indexes(indexes));
let foreign = fetch(pool, queries::FOREIGN_KEYS, schema_name).await?;
attach::foreign_keys(schema, group::foreign_keys(foreign));
Ok(())
}