use crate::{db::IndexState, model::entity::EntityModel};
#[must_use]
pub(in crate::db) fn show_indexes_for_model(model: &EntityModel) -> Vec<String> {
show_indexes_for_model_with_runtime_state(model, None)
}
#[must_use]
pub(in crate::db) fn show_indexes_for_model_with_runtime_state(
model: &EntityModel,
runtime_state: Option<IndexState>,
) -> Vec<String> {
let mut indexes = Vec::with_capacity(model.indexes.len().saturating_add(1));
indexes.push(formatted_index_line(
format!("PRIMARY KEY ({})", model.primary_key.name),
runtime_state,
));
for index in model.indexes {
let kind = if index.is_unique() {
"UNIQUE INDEX"
} else {
"INDEX"
};
let fields = index.fields().join(", ");
indexes.push(formatted_index_line(
format!("{kind} {} ({fields})", index.name()),
runtime_state,
));
}
indexes
}
fn formatted_index_line(line: String, runtime_state: Option<IndexState>) -> String {
match runtime_state {
Some(state) => format!("{line} [state={}]", state.as_str()),
None => line,
}
}