use crate::catalog::{TableDefinition, TableType};
use crate::val::TableName;
#[derive(Debug, Clone)]
pub(crate) struct RelationInfo {
pub table_name: TableName,
pub from_tables: Vec<TableName>,
pub to_tables: Vec<TableName>,
}
#[derive(Debug, Clone, Copy)]
pub(crate) enum RelationDirection {
Outgoing,
Incoming,
}
pub(crate) fn collect_relations(tbs: &[TableDefinition]) -> Vec<RelationInfo> {
tbs.iter()
.filter_map(|tb| {
if let TableType::Relation(ref rel) = tb.table_type {
if !rel.from.is_empty() || !rel.to.is_empty() {
Some(RelationInfo {
table_name: tb.name.clone(),
from_tables: rel.from.clone(),
to_tables: rel.to.clone(),
})
} else {
None
}
} else {
None
}
})
.collect()
}