use sqlparser::ast::{Ident, ObjectName};
pub fn ident_name(ident: &Ident) -> String {
if ident.quote_style.is_some() {
ident.value.clone()
} else {
ident.value.to_ascii_lowercase()
}
}
pub fn object_name_parts(name: &ObjectName) -> Vec<String> {
name.0
.iter()
.filter_map(|part| part.as_ident())
.map(ident_name)
.collect()
}
pub fn function_dispatch_name(name: &ObjectName) -> String {
let parts = object_name_parts(name);
let base = parts.last().cloned().unwrap_or_default();
if parts.len() >= 2 && parts[parts.len() - 2] == "auth" {
format!("auth.{base}")
} else {
base
}
}
pub fn split_schema_table(name: &ObjectName) -> (Option<String>, String) {
let parts = object_name_parts(name);
match parts.len() {
0 => (None, String::new()),
1 => (None, parts[0].clone()),
_ => {
let n = parts[parts.len() - 1].clone();
let s = parts[parts.len() - 2].clone();
(Some(s), n)
}
}
}