surrealdb_sql/
analyzer_function.rs1use common::fmt::EscapeKwFreeIdent;
4use surrealdb_types::{SqlFormat, ToSql, write_sql};
5
6pub fn qualified_name(name: &str) -> String {
8 if name.starts_with("mod::") || name.starts_with("fn::") {
9 name.to_owned()
10 } else {
11 format!("fn::{name}")
12 }
13}
14
15pub fn fmt_analyzer_function(f: &mut String, sql_fmt: SqlFormat, name: &str) {
16 let (kind, path) = if let Some(rest) = name.strip_prefix("mod::") {
17 ("mod", rest)
18 } else if let Some(rest) = name.strip_prefix("fn::") {
19 ("fn", rest)
20 } else {
21 ("fn", name)
22 };
23
24 write_sql!(f, sql_fmt, " FUNCTION {kind}");
25 for segment in path.split("::") {
26 f.push_str("::");
27 EscapeKwFreeIdent(segment).fmt_sql(f, sql_fmt);
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use surrealdb_types::SqlFormat;
34
35 use super::*;
36
37 #[test]
38 fn qualified_name_legacy_fn_suffix() {
39 assert_eq!(qualified_name("foo::bar"), "fn::foo::bar");
40 }
41
42 #[test]
43 fn qualified_name_mod_prefix() {
44 assert_eq!(qualified_name("mod::demo::alter"), "mod::demo::alter");
45 }
46
47 #[test]
48 fn fmt_analyzer_function_fn() {
49 let mut sql = String::new();
50 fmt_analyzer_function(&mut sql, SqlFormat::SingleLine, "foo::bar");
51 assert_eq!(sql, " FUNCTION fn::foo::bar");
52 }
53
54 #[test]
55 fn fmt_analyzer_function_mod() {
56 let mut sql = String::new();
57 fmt_analyzer_function(&mut sql, SqlFormat::SingleLine, "mod::demo::alter");
58 assert_eq!(sql, " FUNCTION mod::demo::alter");
59 }
60}