diff options
Diffstat (limited to 'src/db/mod.rs')
| -rw-r--r-- | src/db/mod.rs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 0bf2f1d..d1d7c9b 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -3,6 +3,7 @@ use std::convert::AsRef; use diesel::prelude::*;
use diesel::r2d2::{ConnectionManager, ManageConnection};
+use diesel::NotFound;
use super::{Result, Error};
pub use self::models::*;
@@ -25,13 +26,23 @@ pub fn find_meme<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> use diesel::sql_types::Text;
let search = search.as_ref();
- let format_search = format!("%{}%", search);
// TODO: check for injection
- memes::table
- .filter(memes::title.ilike(&format_search).or(sql("content ILIKE ").bind::<Text, _>(&format_search)))
+ let mut meme = memes::table
+ .filter(memes::title.eq(search))
.limit(1)
- .first::<Meme>(conn)
+ .first::<Meme>(conn);
+
+ if let Err(NotFound) = meme {
+ let format_search = format!("%{}%", search);
+
+ meme = memes::table
+ .filter(memes::title.ilike(&format_search).or(sql("content ILIKE ").bind::<Text, _>(&format_search)))
+ .limit(1)
+ .first::<Meme>(conn);
+ }
+
+ meme
.map_err(Error::from)
}
|
