Skip to content

Commit 3607c88

Browse files
committed
fix performance regression after 644ebfd and 3868e79
1 parent 644ebfd commit 3607c88

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

src/db/migrate.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,11 @@ pub fn migrate(version: Option<Version>, conn: &mut Client) -> crate::error::Res
843843
"ALTER TABLE builds ADD COLUMN build_server TEXT NOT NULL DEFAULT '';",
844844
"ALTER TABLE builds DROP COLUMN build_server;",
845845
),
846+
sql_migration!(
847+
context, 34, "add index on builds.rid",
848+
"CREATE INDEX builds_release_id_idx ON builds (rid);",
849+
"DROP INDEX builds_release_id_idx;",
850+
),
846851

847852
];
848853

src/web/releases.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -82,35 +82,36 @@ pub(crate) fn get_releases(
8282
builds.build_time,
8383
repositories.stars
8484
FROM crates
85-
INNER JOIN releases ON crates.id = releases.crate_id
85+
{1}
8686
INNER JOIN builds ON releases.id = builds.rid
8787
LEFT JOIN repositories ON releases.repository_id = repositories.id
8888
WHERE
8989
((NOT $3) OR (releases.build_status = FALSE AND releases.is_library = TRUE))
90-
AND ((NOT $4) OR crates.latest_version_id = releases.id)
9190
AND {0} IS NOT NULL
9291
9392
ORDER BY {0} DESC
9493
LIMIT $1 OFFSET $2",
9594
ordering,
95+
if latest_only {
96+
"INNER JOIN releases ON crates.latest_version_id = releases.id"
97+
} else {
98+
"INNER JOIN releases ON crates.id = releases.crate_id"
99+
}
96100
);
97101

98-
conn.query(
99-
query.as_str(),
100-
&[&limit, &offset, &filter_failed, &latest_only],
101-
)
102-
.unwrap()
103-
.into_iter()
104-
.map(|row| Release {
105-
name: row.get(0),
106-
version: row.get(1),
107-
description: row.get(2),
108-
target_name: row.get(3),
109-
rustdoc_status: row.get(4),
110-
build_time: row.get(5),
111-
stars: row.get::<_, Option<i32>>(6).unwrap_or(0),
112-
})
113-
.collect()
102+
conn.query(query.as_str(), &[&limit, &offset, &filter_failed])
103+
.unwrap()
104+
.into_iter()
105+
.map(|row| Release {
106+
name: row.get(0),
107+
version: row.get(1),
108+
description: row.get(2),
109+
target_name: row.get(3),
110+
rustdoc_status: row.get(4),
111+
build_time: row.get(5),
112+
stars: row.get::<_, Option<i32>>(6).unwrap_or(0),
113+
})
114+
.collect()
114115
}
115116

116117
fn get_releases_by_owner(

0 commit comments

Comments
 (0)