Skip to content

Commit 0307dde

Browse files
GuillaumeGomezsyphar
authored andcommitted
Simplify crate details SQL query
1 parent 55cf303 commit 0307dde

File tree

2 files changed

+23
-40
lines changed

2 files changed

+23
-40
lines changed

.sqlx/query-19d4aae1f81f585a9441023da7b92b91ad80c74119478bd85632e873979ace17.json renamed to .sqlx/query-1f90e235d872d98342e4d0924f162bf1a053cf08270fa5648467453653d11d87.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/web/crate_details.rs

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ impl CrateDetails {
124124
req_version: Option<ReqVersion>,
125125
prefetched_releases: Vec<Release>,
126126
) -> Result<Option<CrateDetails>, anyhow::Error> {
127-
// FIXME: Since all subqueries from `builds` table have the same conditions, would be
128-
// nice to group them in one subquery instead.
129127
let krate = match sqlx::query!(
130128
r#"SELECT
131129
crates.id AS crate_id,
@@ -138,17 +136,9 @@ impl CrateDetails {
138136
releases.description_long,
139137
releases.release_time,
140138
release_build_status.build_status as "build_status!: BuildStatus",
141-
(
142-
-- this is the latest build ID that generated content
143-
-- it's used to invalidate some blob storage related caches.
144-
SELECT id
145-
FROM builds
146-
WHERE
147-
builds.rid = releases.id AND
148-
builds.build_status = 'success'
149-
ORDER BY build_finished DESC
150-
LIMIT 1
151-
) AS latest_build_id,
139+
-- this is the latest build ID that generated content
140+
-- it's used to invalidate some blob storage related caches.
141+
builds.id as "latest_build_id?",
152142
releases.rustdoc_status,
153143
releases.archive_storage,
154144
releases.repository_url,
@@ -168,27 +158,11 @@ impl CrateDetails {
168158
releases.documentation_url,
169159
releases.default_target,
170160
releases.source_size as "source_size?",
171-
(
172-
SELECT documentation_size
173-
FROM builds
174-
WHERE
175-
builds.rid = releases.id AND
176-
builds.build_status = 'success'
177-
ORDER BY builds.build_finished
178-
DESC LIMIT 1
179-
) as "documentation_size?",
180-
(
181-
-- we're using the rustc version here to set the correct CSS file
182-
-- in the metadata.
183-
-- So we're only interested in successful builds here.
184-
SELECT rustc_version
185-
FROM builds
186-
WHERE
187-
builds.rid = releases.id AND
188-
builds.build_status = 'success'
189-
ORDER BY builds.build_finished
190-
DESC LIMIT 1
191-
) as "rustc_version?",
161+
builds.documentation_size as "documentation_size?",
162+
-- we're using the rustc version here to set the correct CSS file
163+
-- in the metadata.
164+
-- So we're only interested in successful builds here.
165+
builds.rustc_version as "rustc_version?",
192166
doc_coverage.total_items,
193167
doc_coverage.documented_items,
194168
doc_coverage.total_items_needing_examples,
@@ -198,6 +172,15 @@ impl CrateDetails {
198172
INNER JOIN crates ON releases.crate_id = crates.id
199173
LEFT JOIN doc_coverage ON doc_coverage.release_id = releases.id
200174
LEFT JOIN repositories ON releases.repository_id = repositories.id
175+
LEFT JOIN LATERAL (
176+
SELECT rustc_version, documentation_size, id
177+
FROM builds
178+
WHERE
179+
builds.rid = releases.id AND
180+
builds.build_status = 'success'
181+
ORDER BY builds.build_finished
182+
DESC LIMIT 1
183+
) AS builds ON true
201184
WHERE crates.name = $1 AND releases.version = $2;"#,
202185
name,
203186
version.to_string(),

0 commit comments

Comments
 (0)