Skip to content

Commit 346b573

Browse files
committed
Move wildcard adding code into the like_name function
1 parent b69d505 commit 346b573

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

src/controllers/krate/search.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,6 @@ pub fn search(req: &mut dyn Request) -> CargoResult<Response> {
3838
let conn = req.db_conn()?;
3939
let (offset, limit) = req.pagination(10, 100)?;
4040
let params = req.query();
41-
//extract the search param for loose searching
42-
let search_q = if let Some(q) = params.get("q") {
43-
format!("%{}%", q)
44-
} else {
45-
String::new()
46-
};
4741
let sort = params
4842
.get("sort")
4943
.map(|s| &**s)
@@ -64,10 +58,11 @@ pub fn search(req: &mut dyn Request) -> CargoResult<Response> {
6458
has_filter = true;
6559
if !q_string.is_empty() {
6660
let sort = params.get("sort").map(|s| &**s).unwrap_or("relevance");
61+
6762
let q = plainto_tsquery(q_string);
6863
query = query.filter(
6964
q.matches(crates::textsearchable_index_col)
70-
.or(Crate::like_name(&search_q)),
65+
.or(Crate::like_name(&q_string)),
7166
);
7267

7368
query = query.select((

src/models/krate.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ type CanonCrateName<T> = self::canon_crate_name::HelperType<T>;
8787
type All = diesel::dsl::Select<crates::table, AllColumns>;
8888
type WithName<'a> = diesel::dsl::Eq<CanonCrateName<crates::name>, CanonCrateName<&'a str>>;
8989
/// The result of a loose search
90-
type LikeName<'a> = diesel::dsl::Like<CanonCrateName<crates::name>, CanonCrateName<&'a str>>;
90+
type LikeName = diesel::dsl::Like<CanonCrateName<crates::name>, CanonCrateName<String>>;
9191
type ByName<'a> = diesel::dsl::Filter<All, WithName<'a>>;
9292
type ByExactName<'a> = diesel::dsl::Filter<All, diesel::dsl::Eq<crates::name, &'a str>>;
9393

@@ -236,9 +236,11 @@ impl<'a> NewCrate<'a> {
236236
}
237237

238238
impl Crate {
239-
/// SQL filter with the `like` binary operator
240-
pub fn like_name(name: &str) -> LikeName<'_> {
241-
canon_crate_name(crates::name).like(canon_crate_name(name))
239+
/// SQL filter with the `like` binary operator. Adds wildcards to the beginning and end to get
240+
/// substring matches.
241+
pub fn like_name(name: &str) -> LikeName {
242+
let wildcard_name = format!("%{}%", name);
243+
canon_crate_name(crates::name).like(canon_crate_name(wildcard_name))
242244
}
243245
/// SQL filter with the = binary operator
244246
pub fn with_name(name: &str) -> WithName<'_> {

0 commit comments

Comments
 (0)