pub fn table_id(db: &toasty::Db, table_name: &str) -> toasty_core::schema::db::TableId {
let schema = db.schema();
if let Some(position) = schema.db.tables.iter().position(|t| t.name == table_name) {
return toasty_core::schema::db::TableId(position);
}
if let Some(position) = schema
.db
.tables
.iter()
.position(|t| t.name.ends_with(table_name))
{
return toasty_core::schema::db::TableId(position);
}
let available_tables: Vec<_> = schema.db.tables.iter().map(|t| &t.name).collect();
panic!(
"Table '{}' not found. Available tables: {:?}",
table_name, available_tables
);
}
pub fn column(
db: &toasty::Db,
table_name: &str,
column_name: &str,
) -> toasty_core::schema::db::ColumnId {
columns(db, table_name, &[column_name])[0]
}
pub fn columns(
db: &toasty::Db,
table_name: &str,
column_names: &[&str],
) -> Vec<toasty_core::schema::db::ColumnId> {
let schema = db.schema();
let table = schema
.db
.tables
.iter()
.find(|t| t.name == table_name || t.name.ends_with(table_name))
.unwrap_or_else(|| panic!("Table '{}' not found", table_name));
let table_id = table_id(db, table_name);
column_names
.iter()
.map(|col_name| {
let index = table
.columns
.iter()
.position(|c| c.name == *col_name)
.unwrap_or_else(|| {
panic!("Column '{}' not found in table '{}'", col_name, table_name)
});
toasty_core::schema::db::ColumnId {
table: table_id,
index,
}
})
.collect()
}