35 lines
1.2 KiB
Rust
35 lines
1.2 KiB
Rust
// src/shared/schema_qualifier.rs
|
|
use tonic::Status;
|
|
|
|
/// Qualifies table names with the appropriate schema
|
|
///
|
|
/// Rules:
|
|
/// - Tables created via PostTableDefinition (dynamically created tables) are in 'gen' schema
|
|
/// - System tables (like users, profiles) remain in 'public' schema
|
|
pub fn qualify_table_name(table_name: &str) -> String {
|
|
// Check if table matches the pattern of dynamically created tables (e.g., 2025_something)
|
|
if table_name.starts_with(|c: char| c.is_ascii_digit()) && table_name.contains('_') {
|
|
format!("gen.\"{}\"", table_name)
|
|
} else {
|
|
format!("\"{}\"", table_name)
|
|
}
|
|
}
|
|
|
|
/// Qualifies table names for data operations
|
|
pub fn qualify_table_name_for_data(table_name: &str) -> Result<String, Status> {
|
|
Ok(qualify_table_name(table_name))
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_qualify_table_name() {
|
|
assert_eq!(qualify_table_name("2025_test_schema3"), "gen.\"2025_test_schema3\"");
|
|
assert_eq!(qualify_table_name("users"), "\"users\"");
|
|
assert_eq!(qualify_table_name("profiles"), "\"profiles\"");
|
|
assert_eq!(qualify_table_name("adresar"), "\"adresar\"");
|
|
}
|
|
}
|