@@ -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