mod catalog_filters;
mod schema_filters;
mod table_filters;
use sqlx::postgres::PgPool;
use super::service_contracts::SchemaColumnRecord;
use super::service_row_mapper::map_column_rows;
pub async fn fetch_columns(
pool: &PgPool,
schema_filter: Option<&str>,
table_filter: Option<&str>,
exclude_system_schemas: bool,
) -> Result<Vec<SchemaColumnRecord>, sqlx::Error> {
let rows = match (schema_filter, table_filter, exclude_system_schemas) {
(Some(schema), Some(table), _) => {
schema_filters::fetch_columns_for_schema_table(
pool,
schema,
table,
exclude_system_schemas,
)
.await?
}
(Some(schema), None, _) => {
schema_filters::fetch_columns_for_schema(pool, schema, exclude_system_schemas).await?
}
(None, Some(table), _) => {
table_filters::fetch_columns_for_table(pool, table, exclude_system_schemas).await?
}
(None, None, _) => {
catalog_filters::fetch_columns_for_catalog(pool, exclude_system_schemas).await?
}
};
Ok(map_column_rows(rows))
}