mod catalog_filters;
mod schema_filters;
mod table_filters;
pub(super) fn columns_query(
schema_filter: Option<&str>,
table_filter: Option<&str>,
exclude_system_schemas: bool,
) -> &'static str {
match (
schema_filter.is_some(),
table_filter.is_some(),
exclude_system_schemas,
) {
(true, true, _) => schema_filters::columns_for_schema_table_query(),
(true, false, _) => schema_filters::columns_for_schema_query(),
(false, true, true) => table_filters::columns_for_table_excluding_system_query(),
(false, true, false) => table_filters::columns_for_table_query(),
(false, false, true) => catalog_filters::columns_excluding_system_query(),
(false, false, false) => catalog_filters::columns_all_query(),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn columns_query_uses_schema_table_variant() {
let query = columns_query(Some("public"), Some("users"), false);
assert!(query.contains("WHERE table_schema = $1"));
assert!(query.contains("AND table_name = $2"));
}
#[test]
fn columns_query_uses_schema_variant() {
let query = columns_query(Some("public"), None, false);
assert!(query.contains("WHERE table_schema = $1"));
assert!(!query.contains("AND table_name = $2"));
}
#[test]
fn columns_query_uses_table_variant_without_system_exclusion() {
let query = columns_query(None, Some("users"), false);
assert!(query.contains("WHERE table_name = $1"));
assert!(!query.contains("table_schema NOT IN"));
}
#[test]
fn columns_query_uses_table_variant_with_system_exclusion() {
let query = columns_query(None, Some("users"), true);
assert!(query.contains("WHERE table_name = $1"));
assert!(query.contains("table_schema NOT IN ('information_schema', 'pg_catalog')"));
}
#[test]
fn columns_query_uses_catalog_variant_with_system_exclusion() {
let query = columns_query(None, None, true);
assert!(query.contains("WHERE table_schema NOT IN ('information_schema', 'pg_catalog')"));
}
#[test]
fn columns_query_uses_catalog_all_variant() {
let query = columns_query(None, None, false);
assert!(!query.contains("WHERE table_schema = $1"));
assert!(!query.contains("WHERE table_name = $1"));
assert!(!query.contains("NOT IN ('information_schema', 'pg_catalog')"));
}
}