Skip to content

Commit 3a510f4

Browse files
committed
Added setup for database
1 parent 4a9f063 commit 3a510f4

File tree

5 files changed

+89
-89
lines changed

5 files changed

+89
-89
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,6 @@ jobs:
5858
sleep 5
5959
# Make sure the database is actually working
6060
psql "${CRATESFYI_DATABASE_URL}"
61-
psql "${CRATESFYI_DATABASE_URL}" -c "CREATE EXTENSION IF NOT EXISTS fuzzystrsearch"
62-
63-
- name: Build docs.rs
64-
run: cargo build --locked
6561
6662
- name: Run rustfmt
6763
run: cargo fmt -- --check

docker-compose.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '3'
1+
version: "3"
22
services:
33
web:
44
build: .
@@ -20,7 +20,9 @@ services:
2020
env_file:
2121
- .env
2222
db:
23-
image: postgres:alpine
23+
build:
24+
context: .
25+
dockerfile: ./postgres/Dockerfile
2426
volumes:
2527
- postgres-data:/var/lib/postgresql/data
2628
environment:

postgres/Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM postgres:alpine
2+
EXPOSE 5432
3+
4+
COPY ./postgres/install_extensions.sql /docker-entrypoint-initdb.d/

postgres/install_extensions.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;

src/web/releases.rs

Lines changed: 80 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,13 @@ fn get_search_results(
274274

275275
let statement = "
276276
SELECT
277-
crates.name,
278-
releases.version,
279-
releases.description,
280-
releases.target_name,
281-
releases.release_time,
282-
releases.rustdoc_status,
283-
crates.github_stars,
277+
crates.name AS name,
278+
releases.version AS version,
279+
releases.description AS description,
280+
releases.target_name AS target_name,
281+
releases.release_time AS release_time,
282+
releases.rustdoc_status AS rustdoc_status,
283+
crates.github_stars AS github_stars,
284284
COUNT(*) OVER() as total
285285
FROM crates
286286
INNER JOIN (
@@ -289,7 +289,7 @@ fn get_search_results(
289289
SELECT
290290
releases.id,
291291
releases.crate_id,
292-
rank() OVER (PARTITION BY crate_id ORDER BY release_time DESC) as rank
292+
RANK() OVER (PARTITION BY crate_id ORDER BY release_time DESC) as rank
293293
FROM releases
294294
WHERE releases.rustdoc_status AND NOT releases.yanked
295295
) AS releases
@@ -299,19 +299,14 @@ fn get_search_results(
299299
WHERE
300300
((char_length($1)::float - levenshtein(crates.name, $1)::float) / char_length($1)::float) >= 0.65
301301
OR crates.name ILIKE CONCAT('%', $1, '%')
302-
OR plainto_tsquery($1) @@ to_tsvector(releases.description)
303302
GROUP BY crates.id, releases.id
304303
ORDER BY
305304
levenshtein(crates.name, $1) ASC,
306305
crates.name ILIKE CONCAT('%', $1, '%'),
307-
ts_rank_cd(to_tsvector(releases.description), plainto_tsquery($1), 32) DESC,
308306
releases.downloads DESC
309307
LIMIT $2 OFFSET $3";
310308

311-
let rows = if let Ok(rows) = conn
312-
.query(statement, &[&query, &limit, &offset])
313-
.map_err(|err| dbg!(err))
314-
{
309+
let rows = if let Ok(rows) = conn.query(statement, &[&query, &limit, &offset]) {
315310
rows
316311
} else {
317312
return (0, Vec::new());
@@ -321,18 +316,18 @@ fn get_search_results(
321316
let total_results = rows
322317
.iter()
323318
.next()
324-
.map(|row| row.get::<_, i64>(7))
319+
.map(|row| row.get::<_, i64>("total"))
325320
.unwrap_or_default();
326321
let packages: Vec<Release> = rows
327322
.into_iter()
328323
.map(|row| Release {
329-
name: row.get(0),
330-
version: row.get(1),
331-
description: row.get(2),
332-
target_name: row.get(3),
333-
release_time: row.get(4),
334-
rustdoc_status: row.get(5),
335-
stars: row.get::<_, i32>(6),
324+
name: row.get("name"),
325+
version: row.get("version"),
326+
description: row.get("description"),
327+
target_name: row.get("target_name"),
328+
release_time: row.get("release_time"),
329+
rustdoc_status: row.get("rustdoc_status"),
330+
stars: row.get::<_, i32>("github_stars"),
336331
})
337332
.collect();
338333

@@ -804,29 +799,30 @@ mod tests {
804799
})
805800
}
806801

807-
#[test]
808-
fn search_descriptions() {
809-
wrapper(|env| {
810-
let db = env.db();
811-
db.fake_release()
812-
.name("something_completely_unrelated")
813-
.description("Supercalifragilisticexpialidocious")
814-
.create()?;
815-
816-
let (num_results, results) =
817-
get_search_results(&db.conn(), "supercalifragilisticexpialidocious", 1, 100);
818-
assert_eq!(num_results, 1);
819-
820-
let mut results = results.into_iter();
821-
assert_eq!(
822-
results.next().unwrap().name,
823-
"something_completely_unrelated"
824-
);
825-
assert_eq!(results.count(), 0);
826-
827-
Ok(())
828-
})
829-
}
802+
// Description searching more than doubles search time
803+
// #[test]
804+
// fn search_descriptions() {
805+
// wrapper(|env| {
806+
// let db = env.db();
807+
// db.fake_release()
808+
// .name("something_completely_unrelated")
809+
// .description("Supercalifragilisticexpialidocious")
810+
// .create()?;
811+
//
812+
// let (num_results, results) =
813+
// get_search_results(&db.conn(), "supercalifragilisticexpialidocious", 1, 100);
814+
// assert_eq!(num_results, 1);
815+
//
816+
// let mut results = results.into_iter();
817+
// assert_eq!(
818+
// results.next().unwrap().name,
819+
// "something_completely_unrelated"
820+
// );
821+
// assert_eq!(results.count(), 0);
822+
//
823+
// Ok(())
824+
// })
825+
// }
830826

831827
#[test]
832828
fn search_limits() {
@@ -921,44 +917,45 @@ mod tests {
921917
})
922918
}
923919

924-
#[test]
925-
fn fuzzy_over_description() {
926-
wrapper(|env| {
927-
let db = env.db();
928-
db.fake_release()
929-
.name("name_better_than_description")
930-
.description("this is the correct choice")
931-
.create()?;
932-
db.fake_release()
933-
.name("im_completely_unrelated")
934-
.description("name_better_than_description")
935-
.create()?;
936-
db.fake_release()
937-
.name("i_have_zero_relation_whatsoever")
938-
.create()?;
939-
940-
let (num_results, results) =
941-
get_search_results(&db.conn(), "name_better_than_description", 1, 100);
942-
assert_eq!(num_results, 2);
943-
944-
let mut results = results.into_iter();
945-
946-
let next = results.next().unwrap();
947-
assert_eq!(next.name, "name_better_than_description");
948-
assert_eq!(next.description, Some("this is the correct choice".into()));
949-
950-
let next = results.next().unwrap();
951-
assert_eq!(next.name, "im_completely_unrelated");
952-
assert_eq!(
953-
next.description,
954-
Some("name_better_than_description".into())
955-
);
956-
957-
assert_eq!(results.count(), 0);
958-
959-
Ok(())
960-
})
961-
}
920+
// Description searching more than doubles search time
921+
// #[test]
922+
// fn fuzzy_over_description() {
923+
// wrapper(|env| {
924+
// let db = env.db();
925+
// db.fake_release()
926+
// .name("name_better_than_description")
927+
// .description("this is the correct choice")
928+
// .create()?;
929+
// db.fake_release()
930+
// .name("im_completely_unrelated")
931+
// .description("name_better_than_description")
932+
// .create()?;
933+
// db.fake_release()
934+
// .name("i_have_zero_relation_whatsoever")
935+
// .create()?;
936+
//
937+
// let (num_results, results) =
938+
// get_search_results(&db.conn(), "name_better_than_description", 1, 100);
939+
// assert_eq!(num_results, 2);
940+
//
941+
// let mut results = results.into_iter();
942+
//
943+
// let next = results.next().unwrap();
944+
// assert_eq!(next.name, "name_better_than_description");
945+
// assert_eq!(next.description, Some("this is the correct choice".into()));
946+
//
947+
// let next = results.next().unwrap();
948+
// assert_eq!(next.name, "im_completely_unrelated");
949+
// assert_eq!(
950+
// next.description,
951+
// Some("name_better_than_description".into())
952+
// );
953+
//
954+
// assert_eq!(results.count(), 0);
955+
//
956+
// Ok(())
957+
// })
958+
// }
962959

963960
#[test]
964961
fn dont_return_unrelated() {

0 commit comments

Comments
 (0)