pub fn statement_name(normalized_sql: &str) -> String {
let hash = bsql_core::rapid_hash_str(normalized_sql);
format!("s_{hash:016x}")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deterministic() {
let a = statement_name("select id from users where id = $1");
let b = statement_name("select id from users where id = $1");
assert_eq!(a, b);
}
#[test]
fn different_sql_different_name() {
let a = statement_name("select id from users where id = $1");
let b = statement_name("select id from users where login = $1");
assert_ne!(a, b);
}
#[test]
fn format_is_s_prefix_16_hex() {
let name = statement_name("select 1");
assert!(name.starts_with("s_"), "must start with s_: {name}");
assert_eq!(name.len(), 2 + 16, "s_ + 16 hex chars: {name}");
assert!(
name[2..].chars().all(|c| c.is_ascii_hexdigit()),
"must be hex after s_: {name}"
);
}
}