Skip to main content

nodedb_sql/parser/
normalize.rs

1//! SQL identifier normalization.
2
3/// Normalize a SQL identifier: lowercase unquoted, preserve quoted.
4pub fn normalize_ident(ident: &sqlparser::ast::Ident) -> String {
5    if ident.quote_style.is_some() {
6        ident.value.clone()
7    } else {
8        ident.value.to_lowercase()
9    }
10}
11
12/// Normalize a compound object name (e.g., `schema.table`) to its last part.
13pub fn normalize_object_name(name: &sqlparser::ast::ObjectName) -> String {
14    name.0
15        .last()
16        .map(|part| match part {
17            sqlparser::ast::ObjectNamePart::Identifier(ident) => normalize_ident(ident),
18            _ => String::new(),
19        })
20        .unwrap_or_default()
21}
22
23/// Extract table name and optional alias from a table factor.
24pub fn table_name_from_factor(
25    factor: &sqlparser::ast::TableFactor,
26) -> Option<(String, Option<String>)> {
27    match factor {
28        sqlparser::ast::TableFactor::Table { name, alias, .. } => {
29            let table = normalize_object_name(name);
30            let alias_name = alias.as_ref().map(|a| normalize_ident(&a.name));
31            Some((table, alias_name))
32        }
33        _ => None,
34    }
35}