diff options
author | Christopher Baines <mail@cbaines.net> | 2022-09-14 10:26:03 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2022-09-14 10:26:03 +0100 |
commit | e3062abf33f9887656ce4bd99f34317694533d50 (patch) | |
tree | d5743a43ae552c7a26aadec3c99a3b5df588088e /guix-data-service | |
parent | 12af30c0391cf344ddf9bc30a3497d37ec51de82 (diff) | |
download | data-service-e3062abf33f9887656ce4bd99f34317694533d50.tar data-service-e3062abf33f9887656ce4bd99f34317694533d50.tar.gz |
Speed up finding the locales for a revision
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/model/package-metadata.scm | 44 |
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) |