]> Untitled Git - lemmy.git/commitdiff
Fixing fuzzy_search to escape like chars.
authorDessalines <tyhou13@gmx.com>
Fri, 19 Nov 2021 20:07:20 +0000 (15:07 -0500)
committerDessalines <tyhou13@gmx.com>
Fri, 19 Nov 2021 20:07:20 +0000 (15:07 -0500)
crates/db_schema/src/impls/person.rs
crates/db_schema/src/lib.rs

index a9ba1d2e960a47e784a4831becf030723ff76740..b04764808817c715b659491bc23dcd6e7143a608 100644 (file)
@@ -5,7 +5,7 @@ use crate::{
   source::person::{Person, PersonForm},
   traits::Crud,
 };
-use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl, *};
+use diesel::{dsl::*, result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl};
 use url::Url;
 
 mod safe_type {
@@ -194,7 +194,7 @@ impl Person {
     person
       .filter(deleted.eq(false))
       .filter(local.eq(true))
-      .filter(name.ilike(from_name))
+      .filter(name.eq(from_name))
       .first::<Person>(conn)
   }
 
index f30f0bd80b92059edcd1fc051c8cae55644e0d3c..a2a19290a1800a89b510aa8a2f64d2ba85b6172c 100644 (file)
@@ -70,7 +70,7 @@ pub fn from_opt_str_to_opt_enum<T: std::str::FromStr>(opt: &Option<String>) -> O
 }
 
 pub fn fuzzy_search(q: &str) -> String {
-  let replaced = q.replace(" ", "%");
+  let replaced = q.replace("%", "\\%").replace("_", "\\_").replace(" ", "%");
   format!("%{}%", replaced)
 }
 
@@ -154,8 +154,11 @@ mod tests {
 
   #[test]
   fn test_fuzzy_search() {
-    let test = "This is a fuzzy search";
-    assert_eq!(fuzzy_search(test), "%This%is%a%fuzzy%search%".to_string());
+    let test = "This %is% _a_ fuzzy search";
+    assert_eq!(
+      fuzzy_search(test),
+      "%This%\\%is\\%%\\_a\\_%fuzzy%search%".to_string()
+    );
   }
 
   #[test]