pub fn main_vertex_table_name() -> &'static str {
"vertices"
}
pub fn main_edge_table_name() -> &'static str {
"edges"
}
pub fn vertex_table_name(label: &str) -> String {
format!("vertices_{}", label)
}
pub fn delta_table_name(edge_type: &str, direction: &str) -> String {
format!("deltas_{}_{}", edge_type, direction)
}
pub fn adjacency_table_name(edge_type: &str, direction: &str) -> String {
format!("adjacency_{}_{}", edge_type, direction)
}
pub fn validate_table_name(name: &str) -> anyhow::Result<()> {
if let Some(c) = name
.chars()
.find(|c| c.is_control() || c.is_whitespace() || matches!(c, '/' | '\\'))
{
anyhow::bail!("table name '{name}' contains an unsafe character ({c:?})");
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn adjacency_table_name_is_canonical() {
assert_eq!(adjacency_table_name("KNOWS", "fwd"), "adjacency_KNOWS_fwd");
assert_eq!(adjacency_table_name("KNOWS", "bwd"), "adjacency_KNOWS_bwd");
}
}