|
1 |
| -SELECT |
2 |
| - dependencies.*, crate_downloads, crate_name, total |
3 |
| -FROM ( |
4 |
| - -- Apply pagination to the crates |
5 |
| - SELECT *, COUNT(*) OVER () as total FROM ( |
6 |
| - SELECT |
7 |
| - crate_downloads.downloads AS crate_downloads, |
8 |
| - crates.name AS crate_name, |
9 |
| - versions.id AS version_id |
10 |
| - FROM |
11 |
| - -- We only want the crates whose *max* version is dependent, so we join on a |
12 |
| - -- subselect that includes the versions with their ordinal position |
13 |
| - ( |
14 |
| - SELECT DISTINCT ON (crate_id) |
15 |
| - crate_id, semver_no_prerelease, id |
| 1 | +WITH filterd_versions as ( |
| 2 | + SELECT default_versions.* |
| 3 | + FROM default_versions |
| 4 | + WHERE version_id IN (SELECT version_id FROM dependencies WHERE crate_id = $1) |
| 5 | + AND NOT EXISTS ( |
| 6 | + SELECT 1 |
16 | 7 | FROM versions
|
17 |
| - WHERE NOT yanked |
18 |
| - ORDER BY |
19 |
| - crate_id, |
20 |
| - semver_no_prerelease DESC NULLS LAST, |
21 |
| - id DESC |
22 |
| - ) versions |
23 |
| - INNER JOIN crates |
24 |
| - ON crates.id = versions.crate_id |
25 |
| - INNER JOIN crate_downloads |
26 |
| - ON crate_downloads.crate_id = crates.id |
27 |
| - WHERE versions.id IN (SELECT version_id FROM dependencies WHERE crate_id = $1) |
28 |
| - ) c |
29 |
| - ORDER BY |
30 |
| - crate_downloads DESC, |
31 |
| - crate_name ASC |
32 |
| -) crates |
| 8 | + WHERE id = version_id and yanked |
| 9 | + ) |
| 10 | +) |
| 11 | +SELECT |
| 12 | + dependencies.*, |
| 13 | + crate_downloads.downloads as crate_downloads, |
| 14 | + crates.name as crate_name, |
| 15 | + (SELECT COUNT(*) from filterd_versions) as total |
| 16 | +FROM filterd_versions |
| 17 | +INNER JOIN crates |
| 18 | + ON crates.id = filterd_versions.crate_id |
| 19 | +INNER JOIN crate_downloads using (crate_id) |
33 | 20 | -- Multiple dependencies can exist, we only want first one
|
34 | 21 | CROSS JOIN LATERAL (
|
35 | 22 | SELECT dependencies.*
|
36 | 23 | FROM dependencies
|
37 |
| - WHERE dependencies.crate_id = $1 AND dependencies.version_id = crates.version_id |
| 24 | + WHERE dependencies.crate_id = $1 AND dependencies.version_id = filterd_versions.version_id |
38 | 25 | ORDER BY id ASC
|
39 | 26 | LIMIT 1
|
40 | 27 | ) dependencies
|
| 28 | +ORDER BY |
| 29 | + crate_downloads DESC, |
| 30 | + crate_name ASC |
41 | 31 | OFFSET $2
|
42 | 32 | LIMIT $3
|
0 commit comments