Speed up finding the locales for a revision

This commit is contained in:
Christopher Baines 2022-09-14 10:26:03 +01:00
parent 12af30c039
commit e3062abf33
5 changed files with 51 additions and 15 deletions

View file

@ -435,23 +435,37 @@ WHERE packages.id IN (
revision-id)
(exec-query
conn
"SELECT DISTINCT coalesce(package_descriptions.locale, package_synopsis.locale)
FROM package_descriptions
INNER JOIN package_description_sets
ON package_descriptions.id = ANY (package_description_sets.description_ids)
INNER JOIN package_metadata
ON package_metadata.package_description_set_id = package_description_sets.id
INNER JOIN package_synopsis_sets
ON package_synopsis_sets.id = package_metadata.package_synopsis_set_id
INNER JOIN package_synopsis
ON package_synopsis.id = ANY (package_synopsis_sets.synopsis_ids)
INNER JOIN packages
ON packages.package_metadata_id = package_metadata.id
INNER JOIN package_derivations
ON package_derivations.package_id = packages.id
"
WITH package_metadata_ids AS (
SELECT packages.package_metadata_id AS id
FROM packages
WHERE packages.id IN (
SELECT package_derivations.package_id
FROM package_derivations
INNER JOIN guix_revision_package_derivations
ON package_derivations.id = guix_revision_package_derivations.package_derivation_id
WHERE guix_revision_package_derivations.revision_id = $1"
WHERE guix_revision_package_derivations.revision_id = $1
)
), synopsis_locales AS (
SELECT package_synopsis.locale
FROM package_metadata
INNER JOIN package_synopsis_sets
ON package_synopsis_sets.id = package_metadata.package_synopsis_set_id
INNER JOIN package_synopsis
ON package_synopsis.id = ANY (package_synopsis_sets.synopsis_ids)
WHERE package_metadata.id IN (SELECT id FROM package_metadata_ids)
), description_locales AS (
SELECT package_descriptions.locale
FROM package_metadata
INNER JOIN package_description_sets
ON package_description_sets.id = package_metadata.package_description_set_id
INNER JOIN package_descriptions
ON package_descriptions.id = ANY (package_description_sets.description_ids)
WHERE package_metadata.id IN (SELECT id FROM package_metadata_ids)
)
SELECT locale FROM synopsis_locales
UNION
SELECT locale FROM description_locales"
(list revision-id)))
(define (synopsis-counts-by-locale conn revision-id)