summaryrefslogtreecommitdiff
path: root/src/db/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/mod.rs')
-rw-r--r--src/db/mod.rs19
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)
}