@@ -124,8 +124,6 @@ impl CrateDetails {
124
124
req_version : Option < ReqVersion > ,
125
125
prefetched_releases : Vec < Release > ,
126
126
) -> 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.
129
127
let krate = match sqlx:: query!(
130
128
r#"SELECT
131
129
crates.id AS crate_id,
@@ -138,17 +136,9 @@ impl CrateDetails {
138
136
releases.description_long,
139
137
releases.release_time,
140
138
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?",
152
142
releases.rustdoc_status,
153
143
releases.archive_storage,
154
144
releases.repository_url,
@@ -168,27 +158,11 @@ impl CrateDetails {
168
158
releases.documentation_url,
169
159
releases.default_target,
170
160
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?",
192
166
doc_coverage.total_items,
193
167
doc_coverage.documented_items,
194
168
doc_coverage.total_items_needing_examples,
@@ -198,6 +172,15 @@ impl CrateDetails {
198
172
INNER JOIN crates ON releases.crate_id = crates.id
199
173
LEFT JOIN doc_coverage ON doc_coverage.release_id = releases.id
200
174
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
201
184
WHERE crates.name = $1 AND releases.version = $2;"# ,
202
185
name,
203
186
version. to_string( ) ,
0 commit comments