use crate::config::SourceType;
pub(crate) fn quote_ident(source_type: SourceType, name: &str) -> String {
match source_type {
SourceType::Postgres => format!("\"{}\"", name.replace('"', "\"\"")),
SourceType::Mysql => format!("`{}`", name.replace('`', "``")),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn postgres_plain_identifier() {
assert_eq!(quote_ident(SourceType::Postgres, "id"), "\"id\"");
assert_eq!(
quote_ident(SourceType::Postgres, "created_at"),
"\"created_at\""
);
}
#[test]
fn postgres_escapes_internal_double_quotes() {
assert_eq!(
quote_ident(SourceType::Postgres, "col\"name"),
"\"col\"\"name\""
);
}
#[test]
fn mysql_plain_identifier() {
assert_eq!(quote_ident(SourceType::Mysql, "id"), "`id`");
assert_eq!(quote_ident(SourceType::Mysql, "created_at"), "`created_at`");
}
#[test]
fn mysql_escapes_internal_backticks() {
assert_eq!(quote_ident(SourceType::Mysql, "col`name"), "`col``name`");
}
}