From 58b4d1ae5ec5e10b9705d51873870c20de058dbf Mon Sep 17 00:00:00 2001 From: Leo Kettmeir Date: Tue, 3 Mar 2026 14:11:27 +0100 Subject: [PATCH 1/3] perf: make landing page stats faster (#1326) --- ...de4fd57aaf2389bab1712ebad5906844b277.json} | 8 +-- ...447c35b5733e43692345134dcf50f960e25c.json} | 8 +-- api/src/api/mod.rs | 2 +- api/src/db/database.rs | 51 +++++++++++-------- api/src/util.rs | 1 + 5 files changed, 41 insertions(+), 29 deletions(-) rename api/.sqlx/{query-ef0155c2926ea69baf0738c6317064adee44c3627443478d3a94a45b1748db25.json => query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json} (71%) rename api/.sqlx/{query-ad4dad0f6bf1d42a787cbb3fbc0854131f1d2d293cbb4faa8f69ae7f91c8ecb9.json => query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json} (74%) diff --git a/api/.sqlx/query-ef0155c2926ea69baf0738c6317064adee44c3627443478d3a94a45b1748db25.json b/api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json similarity index 71% rename from api/.sqlx/query-ef0155c2926ea69baf0738c6317064adee44c3627443478d3a94a45b1748db25.json rename to api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json index 8a3f0cab6..c04363c67 100644 --- a/api/.sqlx/query-ef0155c2926ea69baf0738c6317064adee44c3627443478d3a94a45b1748db25.json +++ b/api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as \"package_latest_version\",\n (SELECT meta FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n WHERE (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND is_yanked = false AND version IS NOT NULL ORDER BY version DESC LIMIT 1) IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", + "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version\",\n latest.meta as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE EXISTS (\n SELECT 1 FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND is_yanked = false\n ) AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", "describe": { "columns": [ { @@ -119,8 +119,8 @@ false, false, null, - null, - null, + false, + false, false, false, false, @@ -128,5 +128,5 @@ false ] }, - "hash": "ef0155c2926ea69baf0738c6317064adee44c3627443478d3a94a45b1748db25" + "hash": "318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277" } diff --git a/api/.sqlx/query-ad4dad0f6bf1d42a787cbb3fbc0854131f1d2d293cbb4faa8f69ae7f91c8ecb9.json b/api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json similarity index 74% rename from api/.sqlx/query-ad4dad0f6bf1d42a787cbb3fbc0854131f1d2d293cbb4faa8f69ae7f91c8ecb9.json rename to api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json index 834d1032a..dd22b7584 100644 --- a/api/.sqlx/query-ad4dad0f6bf1d42a787cbb3fbc0854131f1d2d293cbb4faa8f69ae7f91c8ecb9.json +++ b/api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as \"package_latest_version\",\n (SELECT meta FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", + "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version\",\n latest.meta as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", "describe": { "columns": [ { @@ -119,8 +119,8 @@ false, false, null, - null, - null, + false, + false, false, false, false, @@ -128,5 +128,5 @@ false ] }, - "hash": "ad4dad0f6bf1d42a787cbb3fbc0854131f1d2d293cbb4faa8f69ae7f91c8ecb9" + "hash": "335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c" } diff --git a/api/src/api/mod.rs b/api/src/api/mod.rs index 1bac906f5..2c0c1e44f 100644 --- a/api/src/api/mod.rs +++ b/api/src/api/mod.rs @@ -51,7 +51,7 @@ pub fn api_router() -> Router { .get("/packages", util::json(global_list_handler)) .get( "/stats", - util::cache(CacheDuration::ONE_MINUTE, util::json(global_stats_handler)), + util::cache(CacheDuration::TEN_MINUTES, util::json(global_stats_handler)), ) .get( // todo: remove once CLI uses the new endpoint diff --git a/api/src/db/database.rs b/api/src/db/database.rs index 3fedea1c5..7ca00b042 100644 --- a/api/src/db/database.rs +++ b/api/src/db/database.rs @@ -1677,15 +1677,23 @@ impl Database { Vec, Vec, )> { - let newest = sqlx::query!( + let newest_fut = sqlx::query!( r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as "package_latest_version", - (SELECT meta FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as "package_version_meta: PackageVersionMeta", + latest.version as "package_latest_version", + latest.meta as "package_version_meta: PackageVersionMeta", github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" FROM packages LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id - WHERE (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND is_yanked = false AND version IS NOT NULL ORDER BY version DESC LIMIT 1) IS NOT NULL AND NOT packages.is_archived + LEFT JOIN LATERAL ( + SELECT version, meta FROM package_versions + WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false + ORDER BY version DESC LIMIT 1 + ) latest ON true + WHERE EXISTS ( + SELECT 1 FROM package_versions + WHERE scope = packages.scope AND name = packages.name AND is_yanked = false + ) AND NOT packages.is_archived ORDER BY packages.created_at DESC LIMIT 10"#, ) @@ -1699,7 +1707,7 @@ impl Database { created_at: r.package_created_at, updated_at: r.package_updated_at, version_count: r.package_version_count, - latest_version: r.package_latest_version, + latest_version: Some(r.package_latest_version), when_featured: r.package_when_featured, is_archived: r.package_is_archived, readme_source: r.package_readme_source, @@ -1715,13 +1723,11 @@ impl Database { } else { None }; - let meta = r.package_version_meta.unwrap_or_default(); - (package, github_repository, meta) + (package, github_repository, r.package_version_meta) }) - .fetch_all(&self.pool) - .await?; + .fetch_all(&self.pool); - let updated = sqlx::query_as!( + let updated_fut = sqlx::query_as!( PackageVersion, r#"SELECT package_versions.scope as "scope: ScopeName", package_versions.name as "name: PackageName", package_versions.version as "version: Version", package_versions.user_id, package_versions.readme_path as "readme_path: PackagePath", package_versions.exports as "exports: ExportsMap", package_versions.is_yanked, package_versions.uses_npm, package_versions.meta as "meta: PackageVersionMeta", package_versions.updated_at, package_versions.created_at, package_versions.rekor_log_id, package_versions.license FROM package_versions @@ -1730,17 +1736,21 @@ impl Database { ORDER BY package_versions.created_at DESC LIMIT 10"#, ) - .fetch_all(&self.pool) - .await?; + .fetch_all(&self.pool); - let featured = sqlx::query!( + let featured_fut = sqlx::query!( r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - (SELECT version FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as "package_latest_version", - (SELECT meta FROM package_versions WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false ORDER BY version DESC LIMIT 1) as "package_version_meta: PackageVersionMeta", + latest.version as "package_latest_version", + latest.meta as "package_version_meta: PackageVersionMeta", github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" FROM packages LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id + LEFT JOIN LATERAL ( + SELECT version, meta FROM package_versions + WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false + ORDER BY version DESC LIMIT 1 + ) latest ON true WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived ORDER BY packages.when_featured DESC LIMIT 10"#, @@ -1755,7 +1765,7 @@ impl Database { created_at: r.package_created_at, updated_at: r.package_updated_at, version_count: r.package_version_count, - latest_version: r.package_latest_version, + latest_version: Some(r.package_latest_version), when_featured: r.package_when_featured, is_archived: r.package_is_archived, readme_source: r.package_readme_source, @@ -1771,11 +1781,12 @@ impl Database { } else { None }; - let meta = r.package_version_meta.unwrap_or_default(); - (package, github_repository, meta) + (package, github_repository, r.package_version_meta) }) - .fetch_all(&self.pool) - .await?; + .fetch_all(&self.pool); + + let (newest, updated, featured) = + tokio::try_join!(newest_fut, updated_fut, featured_fut)?; Ok((newest, updated, featured)) } diff --git a/api/src/util.rs b/api/src/util.rs index 54c090a4d..4033adc14 100644 --- a/api/src/util.rs +++ b/api/src/util.rs @@ -114,6 +114,7 @@ where pub struct CacheDuration(pub usize); impl CacheDuration { pub const ONE_MINUTE: CacheDuration = CacheDuration(60); + pub const TEN_MINUTES: CacheDuration = CacheDuration(60 * 10); pub const ONE_DAY: CacheDuration = CacheDuration(60 * 60 * 24); pub const FOREVER: CacheDuration = CacheDuration(60 * 60 * 24 * 365); } From dfe3504ab422898a145ec43793c7d18f24b15ff2 Mon Sep 17 00:00:00 2001 From: Leo Kettmeir Date: Tue, 3 Mar 2026 15:49:12 +0100 Subject: [PATCH 2/3] fix: make optional fields actually optional in stats queries (#1327) --- ...5dc017cd8a8fae02189ee046485b66bc69f19.json} | 8 ++++---- ...a56ee60fdba567ef29b90ef16b4d9b9f1830a.json} | 8 ++++---- api/src/db/database.rs | 18 ++++++++++-------- 3 files changed, 18 insertions(+), 16 deletions(-) rename api/.sqlx/{query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json => query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json} (73%) rename api/.sqlx/{query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json => query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json} (74%) diff --git a/api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json b/api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json similarity index 73% rename from api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json rename to api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json index c04363c67..b04f503ee 100644 --- a/api/.sqlx/query-318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277.json +++ b/api/.sqlx/query-30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version\",\n latest.meta as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE EXISTS (\n SELECT 1 FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND is_yanked = false\n ) AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", + "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version?\",\n latest.meta as \"package_version_meta?: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE EXISTS (\n SELECT 1 FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND is_yanked = false\n ) AND NOT packages.is_archived\n ORDER BY packages.created_at DESC\n LIMIT 10", "describe": { "columns": [ { @@ -70,12 +70,12 @@ }, { "ordinal": 11, - "name": "package_latest_version", + "name": "package_latest_version?", "type_info": "Text" }, { "ordinal": 12, - "name": "package_version_meta: PackageVersionMeta", + "name": "package_version_meta?: PackageVersionMeta", "type_info": "Jsonb" }, { @@ -128,5 +128,5 @@ false ] }, - "hash": "318a5aa55e505dbcb6b1558dfe10de4fd57aaf2389bab1712ebad5906844b277" + "hash": "30b9ed6f2599f58359be85dbe805dc017cd8a8fae02189ee046485b66bc69f19" } diff --git a/api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json b/api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json similarity index 74% rename from api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json rename to api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json index dd22b7584..515c0259f 100644 --- a/api/.sqlx/query-335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c.json +++ b/api/.sqlx/query-e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version\",\n latest.meta as \"package_version_meta: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", + "query": "SELECT packages.scope \"package_scope: ScopeName\", packages.name \"package_name: PackageName\", packages.description \"package_description\", packages.github_repository_id \"package_github_repository_id\", packages.runtime_compat as \"package_runtime_compat: RuntimeCompat\", packages.readme_source as \"package_readme_source: ReadmeSource\", packages.when_featured \"package_when_featured\", packages.is_archived \"package_is_archived\", packages.updated_at \"package_updated_at\", packages.created_at \"package_created_at\",\n (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as \"package_version_count!\",\n latest.version as \"package_latest_version?\",\n latest.meta as \"package_version_meta?: PackageVersionMeta\",\n github_repositories.id \"github_repository_id?\", github_repositories.owner \"github_repository_owner?\", github_repositories.name \"github_repository_name?\", github_repositories.updated_at \"github_repository_updated_at?\", github_repositories.created_at \"github_repository_created_at?\"\n FROM packages\n LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id\n LEFT JOIN LATERAL (\n SELECT version, meta FROM package_versions\n WHERE scope = packages.scope AND name = packages.name AND version NOT LIKE '%-%' AND is_yanked = false\n ORDER BY version DESC LIMIT 1\n ) latest ON true\n WHERE packages.when_featured IS NOT NULL AND NOT packages.is_archived\n ORDER BY packages.when_featured DESC\n LIMIT 10", "describe": { "columns": [ { @@ -70,12 +70,12 @@ }, { "ordinal": 11, - "name": "package_latest_version", + "name": "package_latest_version?", "type_info": "Text" }, { "ordinal": 12, - "name": "package_version_meta: PackageVersionMeta", + "name": "package_version_meta?: PackageVersionMeta", "type_info": "Jsonb" }, { @@ -128,5 +128,5 @@ false ] }, - "hash": "335e37c8fe2a5958808452edffe9447c35b5733e43692345134dcf50f960e25c" + "hash": "e6b8c334e0d73d20c5031c4486ea56ee60fdba567ef29b90ef16b4d9b9f1830a" } diff --git a/api/src/db/database.rs b/api/src/db/database.rs index 7ca00b042..c1a759de6 100644 --- a/api/src/db/database.rs +++ b/api/src/db/database.rs @@ -1680,8 +1680,8 @@ impl Database { let newest_fut = sqlx::query!( r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - latest.version as "package_latest_version", - latest.meta as "package_version_meta: PackageVersionMeta", + latest.version as "package_latest_version?", + latest.meta as "package_version_meta?: PackageVersionMeta", github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" FROM packages LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id @@ -1707,7 +1707,7 @@ impl Database { created_at: r.package_created_at, updated_at: r.package_updated_at, version_count: r.package_version_count, - latest_version: Some(r.package_latest_version), + latest_version: r.package_latest_version, when_featured: r.package_when_featured, is_archived: r.package_is_archived, readme_source: r.package_readme_source, @@ -1723,7 +1723,8 @@ impl Database { } else { None }; - (package, github_repository, r.package_version_meta) + let meta = r.package_version_meta.unwrap_or_default(); + (package, github_repository, meta) }) .fetch_all(&self.pool); @@ -1741,8 +1742,8 @@ impl Database { let featured_fut = sqlx::query!( r#"SELECT packages.scope "package_scope: ScopeName", packages.name "package_name: PackageName", packages.description "package_description", packages.github_repository_id "package_github_repository_id", packages.runtime_compat as "package_runtime_compat: RuntimeCompat", packages.readme_source as "package_readme_source: ReadmeSource", packages.when_featured "package_when_featured", packages.is_archived "package_is_archived", packages.updated_at "package_updated_at", packages.created_at "package_created_at", (SELECT COUNT(created_at) FROM package_versions WHERE scope = packages.scope AND name = packages.name) as "package_version_count!", - latest.version as "package_latest_version", - latest.meta as "package_version_meta: PackageVersionMeta", + latest.version as "package_latest_version?", + latest.meta as "package_version_meta?: PackageVersionMeta", github_repositories.id "github_repository_id?", github_repositories.owner "github_repository_owner?", github_repositories.name "github_repository_name?", github_repositories.updated_at "github_repository_updated_at?", github_repositories.created_at "github_repository_created_at?" FROM packages LEFT JOIN github_repositories ON packages.github_repository_id = github_repositories.id @@ -1765,7 +1766,7 @@ impl Database { created_at: r.package_created_at, updated_at: r.package_updated_at, version_count: r.package_version_count, - latest_version: Some(r.package_latest_version), + latest_version: r.package_latest_version, when_featured: r.package_when_featured, is_archived: r.package_is_archived, readme_source: r.package_readme_source, @@ -1781,7 +1782,8 @@ impl Database { } else { None }; - (package, github_repository, r.package_version_meta) + let meta = r.package_version_meta.unwrap_or_default(); + (package, github_repository, meta) }) .fetch_all(&self.pool); From 7ed69e9a3f8d8f0afe1c9e85694b227a24861dc3 Mon Sep 17 00:00:00 2001 From: Leo Kettmeir Date: Tue, 3 Mar 2026 16:59:09 +0100 Subject: [PATCH 3/3] fix: add migration (#1329) --- .../20260303000000_package_versions_created_at_index.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 api/migrations/20260303000000_package_versions_created_at_index.sql diff --git a/api/migrations/20260303000000_package_versions_created_at_index.sql b/api/migrations/20260303000000_package_versions_created_at_index.sql new file mode 100644 index 000000000..0d62f0786 --- /dev/null +++ b/api/migrations/20260303000000_package_versions_created_at_index.sql @@ -0,0 +1,3 @@ +-- Index for "recently updated" version listings (package_stats updated query) +-- Used in: ORDER BY package_versions.created_at DESC LIMIT 10 +CREATE INDEX idx_package_versions_created_at ON package_versions (created_at DESC);