mirror of
https://git.joinfirefish.org/firefish/firefish.git
synced 2024-05-19 09:01:10 +02:00
37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
#[crate::export]
|
||
pub fn sql_like_escape(src: &str) -> String {
|
||
src.replace('%', r"\%").replace('_', r"\_")
|
||
}
|
||
|
||
#[crate::export]
|
||
pub fn safe_for_sql(src: &str) -> bool {
|
||
!src.contains([
|
||
'\0', '\x08', '\x09', '\x1a', '\n', '\r', '"', '\'', '\\', '%',
|
||
])
|
||
}
|
||
|
||
#[cfg(test)]
|
||
mod unit_test {
|
||
use super::{safe_for_sql, sql_like_escape};
|
||
use pretty_assertions::assert_eq;
|
||
|
||
#[test]
|
||
fn sql_like_escape_test() {
|
||
assert_eq!(sql_like_escape(""), "");
|
||
assert_eq!(sql_like_escape("abc"), "abc");
|
||
assert_eq!(sql_like_escape("a%bc"), r"a\%bc");
|
||
assert_eq!(sql_like_escape("a呼%吸bc"), r"a呼\%吸bc");
|
||
assert_eq!(sql_like_escape("a呼%吸b%_c"), r"a呼\%吸b\%\_c");
|
||
assert_eq!(sql_like_escape("_اللغة العربية"), r"\_اللغة العربية");
|
||
}
|
||
|
||
#[test]
|
||
fn safe_for_sql_test() {
|
||
assert!(safe_for_sql("123"));
|
||
assert!(safe_for_sql("人間"));
|
||
assert!(!safe_for_sql("人間\x09"));
|
||
assert!(!safe_for_sql("abc\ndef"));
|
||
assert!(!safe_for_sql("%something%"));
|
||
}
|
||
}
|