summaryrefslogtreecommitdiff
path: root/src/db/mod.rs
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2018-04-06 19:22:55 -0400
committerNathan Perry <avaglir@gmail.com>2018-04-06 19:22:55 -0400
commitd6bea61fa917d257219a43386c88a4f04cf82408 (patch)
treec008923ffd1a934a4d295dddb9f5557a0e96ab4f /src/db/mod.rs
parentd209da7a02887f433bfdd44f9b225179bdbb7b75 (diff)
database alteration in-flight
Diffstat (limited to 'src/db/mod.rs')
-rw-r--r--src/db/mod.rs25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs
index 258d5a5..0862883 100644
--- a/src/db/mod.rs
+++ b/src/db/mod.rs
@@ -1,4 +1,5 @@
use std::env;
+use std::convert::AsRef;
use diesel::prelude::*;
use diesel::r2d2::{ConnectionManager, ManageConnection};
@@ -19,8 +20,10 @@ pub fn connection() -> Result<PgConnection> {
CONN_MGR.connect().map_err(Error::from)
}
-pub fn find_text(conn: &PgConnection, search: String) -> Result<Meme> {
+pub fn find_meme<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> {
use diesel::dsl::sql;
+
+ let search = search.as_ref();
let format_search = format!("%{}%", search);
memes::table
@@ -30,18 +33,32 @@ pub fn find_text(conn: &PgConnection, search: String) -> Result<Meme> {
.map_err(Error::from)
}
-pub fn find_audio(conn: &PgConnection, search: String) -> Result<Meme> {
+pub fn find_text<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> {
+ use diesel::dsl::sql;
+
+ let search = search.as_ref();
let format_search = format!("%{}%", search);
memes::table
+ .filter((memes::title.ilike(&format_search).or(sql(&format!("content ILIKE %{}%", search))))
+ .and(memes::content.is_not_null()))
+ .limit(1)
+ .first::<Meme>(conn)
+ .map_err(Error::from)
+}
+
+pub fn find_audio<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> {
+ let format_search = format!("%{}%", search.as_ref());
+
+ memes::table
.filter(memes::title.ilike(format_search).and(memes::audio_id.is_not_null()))
.limit(1)
.first::<Meme>(conn)
.map_err(Error::from)
}
-pub fn find_image(conn: &PgConnection, search: String) -> Result<Meme> {
- let format_search = format!("%{}%", search);
+pub fn find_image<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> {
+ let format_search = format!("%{}%", search.as_ref());
memes::table
.filter(memes::title.ilike(format_search).and(memes::image_id.is_not_null()))