use std::collections::BTreeMap;
use super::response_contracts::{SchemaColumn, SchemaTableWithColumns};
use super::service::{SchemaColumnRecord, SchemaRelationRecord};
pub(super) fn build_schema_overview_tables(
relations: Vec<SchemaRelationRecord>,
columns: Vec<SchemaColumnRecord>,
) -> Vec<SchemaTableWithColumns> {
let mut columns_by_table: BTreeMap<String, Vec<SchemaColumn>> = BTreeMap::new();
for column in columns {
columns_by_table
.entry(column.table_name)
.or_default()
.push(SchemaColumn {
column_name: column.column_name,
data_type: column.data_type,
column_default: column.column_default,
is_nullable: column.is_nullable,
});
}
relations
.into_iter()
.filter(|relation| relation.relation_type.eq_ignore_ascii_case("BASE TABLE"))
.map(|relation| SchemaTableWithColumns {
table_name: relation.table_name.clone(),
columns: columns_by_table
.remove(&relation.table_name)
.unwrap_or_default(),
})
.collect()
}