From 2afe0063562c631d3f048868ebe3fe713f5b8cfa Mon Sep 17 00:00:00 2001 From: aecsocket <43144841+aecsocket@users.noreply.github.com> Date: Thu, 8 Oct 2026 17:20:07 +0100 Subject: [PATCH] fix: speed up issue detail queries --- ...1794cfb4dd6f8bf54985c182840dfeffd05f8.json | 34 ++++++++++ ...e04d15b222762a4b5f2102b404e06f5285f4a.json | 34 ---------- .../internal/delphi/tech_review_queue.rs | 63 ++++++++++--------- 3 files changed, 69 insertions(+), 62 deletions(-) create mode 100644 apps/labrinth/.sqlx/query-6f1e755a90bdc960e164785b16e1794cfb4dd6f8bf54985c182840dfeffd05f8.json delete mode 100644 apps/labrinth/.sqlx/query-9f8d7940181e60f6867f77f6e84e04d15b222762a4b5f2102b404e06f5285f4a.json diff --git a/apps/labrinth/.sqlx/query-6f1e755a90bdc960e164785b16e1794cfb4dd6f8bf54985c182840dfeffd05f8.json b/apps/labrinth/.sqlx/query-6f1e755a90bdc960e164785b16e1794cfb4dd6f8bf54985c182840dfeffd05f8.json new file mode 100644 index 0000000000..15252c1303 --- /dev/null +++ b/apps/labrinth/.sqlx/query-6f1e755a90bdc960e164785b16e1794cfb4dd6f8bf54985c182840dfeffd05f8.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT\n requested.project_id AS \"project_id!: DBProjectId\",\n EXISTS (\n SELECT 1\n FROM versions version\n INNER JOIN files file ON file.version_id = version.id\n INNER JOIN delphi_reports report ON report.file_id = file.id\n INNER JOIN delphi_report_issues issue ON issue.report_id = report.id\n INNER JOIN delphi_report_issue_details detail ON detail.issue_id = issue.id\n WHERE version.mod_id = requested.project_id\n AND NOT EXISTS (\n SELECT 1\n FROM delphi_reports newer_report\n WHERE newer_report.file_id = report.file_id\n AND newer_report.delphi_version > report.delphi_version\n )\n ) AS \"has_details!\",\n CASE WHEN EXISTS (\n SELECT 1\n FROM delphi_tech_review_queue queued\n WHERE queued.project_id = requested.project_id\n ) THEN FALSE\n ELSE EXISTS (\n SELECT 1\n FROM delphi_issue_details_with_statuses detail\n INNER JOIN delphi_report_issues issue ON issue.id = detail.issue_id\n INNER JOIN delphi_reports report ON report.id = issue.report_id\n WHERE detail.project_id = requested.project_id\n AND detail.status IN ('pending', 'unsafe')\n AND detail.severity != 'hidden'\n AND NOT EXISTS (\n SELECT 1\n FROM delphi_reports newer_report\n WHERE newer_report.file_id = report.file_id\n AND newer_report.delphi_version > report.delphi_version\n )\n ) END AS \"needs_review!\"\n FROM unnest($1::bigint[]) AS requested(project_id)\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "project_id!: DBProjectId", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "has_details!", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "needs_review!", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8Array" + ] + }, + "nullable": [ + null, + null, + null + ] + }, + "hash": "6f1e755a90bdc960e164785b16e1794cfb4dd6f8bf54985c182840dfeffd05f8" +} diff --git a/apps/labrinth/.sqlx/query-9f8d7940181e60f6867f77f6e84e04d15b222762a4b5f2102b404e06f5285f4a.json b/apps/labrinth/.sqlx/query-9f8d7940181e60f6867f77f6e84e04d15b222762a4b5f2102b404e06f5285f4a.json deleted file mode 100644 index 93b73cb364..0000000000 --- a/apps/labrinth/.sqlx/query-9f8d7940181e60f6867f77f6e84e04d15b222762a4b5f2102b404e06f5285f4a.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "\n WITH current_details AS (\n SELECT\n detail.project_id,\n detail.status,\n detail.severity\n FROM delphi_issue_details_with_statuses detail\n INNER JOIN delphi_report_issues issue ON issue.id = detail.issue_id\n INNER JOIN delphi_reports report\n ON report.id = issue.report_id\n AND NOT EXISTS (\n SELECT 1\n FROM delphi_reports newer_report\n WHERE\n newer_report.file_id = report.file_id\n AND newer_report.delphi_version > report.delphi_version\n )\n )\n SELECT\n requested.project_id AS \"project_id!: DBProjectId\",\n BOOL_OR(current_details.project_id IS NOT NULL) AS \"has_details!\",\n COALESCE(\n BOOL_OR(\n current_details.status IN ('pending', 'unsafe')\n AND current_details.severity != 'hidden'\n ),\n FALSE\n ) AS \"needs_review!\"\n FROM unnest($1::bigint[]) AS requested(project_id)\n LEFT JOIN current_details\n ON current_details.project_id = requested.project_id\n GROUP BY requested.project_id\n ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "project_id!: DBProjectId", - "type_info": "Int8" - }, - { - "ordinal": 1, - "name": "has_details!", - "type_info": "Bool" - }, - { - "ordinal": 2, - "name": "needs_review!", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int8Array" - ] - }, - "nullable": [ - null, - null, - null - ] - }, - "hash": "9f8d7940181e60f6867f77f6e84e04d15b222762a4b5f2102b404e06f5285f4a" -} diff --git a/apps/labrinth/src/routes/internal/delphi/tech_review_queue.rs b/apps/labrinth/src/routes/internal/delphi/tech_review_queue.rs index 9d57b8b71f..985db1d371 100644 --- a/apps/labrinth/src/routes/internal/delphi/tech_review_queue.rs +++ b/apps/labrinth/src/routes/internal/delphi/tech_review_queue.rs @@ -145,37 +145,44 @@ pub async fn sync_projects( let rows = sqlx::query!( r#" - WITH current_details AS ( - SELECT - detail.project_id, - detail.status, - detail.severity - FROM delphi_issue_details_with_statuses detail - INNER JOIN delphi_report_issues issue ON issue.id = detail.issue_id - INNER JOIN delphi_reports report - ON report.id = issue.report_id - AND NOT EXISTS ( - SELECT 1 - FROM delphi_reports newer_report - WHERE - newer_report.file_id = report.file_id - AND newer_report.delphi_version > report.delphi_version - ) - ) SELECT requested.project_id AS "project_id!: DBProjectId", - BOOL_OR(current_details.project_id IS NOT NULL) AS "has_details!", - COALESCE( - BOOL_OR( - current_details.status IN ('pending', 'unsafe') - AND current_details.severity != 'hidden' - ), - FALSE - ) AS "needs_review!" + EXISTS ( + SELECT 1 + FROM versions version + INNER JOIN files file ON file.version_id = version.id + INNER JOIN delphi_reports report ON report.file_id = file.id + INNER JOIN delphi_report_issues issue ON issue.report_id = report.id + INNER JOIN delphi_report_issue_details detail ON detail.issue_id = issue.id + WHERE version.mod_id = requested.project_id + AND NOT EXISTS ( + SELECT 1 + FROM delphi_reports newer_report + WHERE newer_report.file_id = report.file_id + AND newer_report.delphi_version > report.delphi_version + ) + ) AS "has_details!", + CASE WHEN EXISTS ( + SELECT 1 + FROM delphi_tech_review_queue queued + WHERE queued.project_id = requested.project_id + ) THEN FALSE + ELSE EXISTS ( + SELECT 1 + FROM delphi_issue_details_with_statuses detail + INNER JOIN delphi_report_issues issue ON issue.id = detail.issue_id + INNER JOIN delphi_reports report ON report.id = issue.report_id + WHERE detail.project_id = requested.project_id + AND detail.status IN ('pending', 'unsafe') + AND detail.severity != 'hidden' + AND NOT EXISTS ( + SELECT 1 + FROM delphi_reports newer_report + WHERE newer_report.file_id = report.file_id + AND newer_report.delphi_version > report.delphi_version + ) + ) END AS "needs_review!" FROM unnest($1::bigint[]) AS requested(project_id) - LEFT JOIN current_details - ON current_details.project_id = requested.project_id - GROUP BY requested.project_id "#, &project_ids.iter().map(|id| id.0).collect::>(), )