mod catalog_filters;
mod schema_filters;
pub(super) fn relations_query(
schema_filter: Option<&str>,
exclude_system_schemas: bool,
) -> &'static str {
match (schema_filter.is_some(), exclude_system_schemas) {
(true, _) => schema_filters::relations_for_schema_query(),
(false, true) => catalog_filters::relations_excluding_system_query(),
(false, false) => catalog_filters::relations_all_query(),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn relations_query_uses_schema_variant() {
let query = relations_query(Some("public"), false);
assert!(query.contains("WHERE table_schema = $1"));
assert!(query.contains("table_type IN ('BASE TABLE', 'VIEW')"));
}
#[test]
fn relations_query_uses_catalog_excluding_system_variant() {
let query = relations_query(None, true);
assert!(query.contains("table_schema NOT IN ('information_schema', 'pg_catalog')"));
}
#[test]
fn relations_query_uses_catalog_all_variant() {
let query = relations_query(None, false);
assert!(!query.contains("WHERE table_schema = $1"));
assert!(!query.contains("table_schema NOT IN ('information_schema', 'pg_catalog')"));
}
}