aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/package-metadata.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/model/package-metadata.scm')
-rw-r--r--guix-data-service/model/package-metadata.scm44
1 files changed, 29 insertions, 15 deletions
diff --git a/guix-data-service/model/package-metadata.scm b/guix-data-service/model/package-metadata.scm
index 9593b49..4372d8f 100644
--- a/guix-data-service/model/package-metadata.scm
+++ b/guix-data-service/model/package-metadata.scm
@@ -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)