Update the package_metadata_tsvectors with new entries

Signed-off-by: Christopher Baines <mail@cbaines.net>
This commit is contained in:
Danjela Lura 2020-08-07 17:16:44 +02:00 committed by Christopher Baines
parent ee613cdb30
commit 5b3e5d9441
3 changed files with 108 additions and 36 deletions

View file

@ -17,6 +17,7 @@
(define-module (guix-data-service model package-metadata)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)
#:use-module (squee)
@ -33,6 +34,7 @@
#:export (select-package-metadata-by-revision-name-and-version
inferior-packages->package-metadata-ids
inferior-packages->translated-package-descriptions-and-synopsis
insert-package-metadata-tsvector-entries
package-description-and-synopsis-locale-options-guix-revision
@ -493,3 +495,65 @@ GROUP BY package_descriptions.locale;
`(,locale . ,(string->number description-counts))))
(exec-query conn description-counts
(list revision-id))))
(define (insert-package-metadata-tsvector-entries conn
package-metadata-ids)
(define query
(string-append
"
INSERT INTO package_metadata_tsvectors (package_metadata_id, locale,
synopsis_and_description, package_synopsis_id, package_description_id)
SELECT DISTINCT ON (package_metadata.id, locale)
package_metadata.id,
CASE WHEN translated_package_synopsis.locale != 'en_US.utf8'
THEN translated_package_synopsis.locale
ELSE translated_package_descriptions.locale
END AS locale,
(
setweight(to_tsvector(translated_package_synopsis.synopsis), 'B') ||
setweight(to_tsvector(translated_package_descriptions.description), 'C')
),
translated_package_synopsis.id,
translated_package_descriptions.id
FROM package_metadata
INNER JOIN (
SELECT package_description_sets.id AS package_description_set_id,
package_descriptions.id, package_descriptions.description,
package_descriptions.locale
FROM package_description_sets
INNER JOIN package_descriptions
ON package_descriptions.id = ANY (package_description_sets.description_ids)
ORDER BY package_description_sets.id,
CASE WHEN package_descriptions.locale = 'en_US.utf8' THEN 1
ELSE 2
END DESC
) AS translated_package_descriptions
ON package_metadata.package_description_set_id =
translated_package_descriptions.package_description_set_id
INNER JOIN (
SELECT package_synopsis_sets.id AS package_synopsis_set_id,
package_synopsis.id, package_synopsis.synopsis, package_synopsis.locale
FROM package_synopsis_sets
INNER JOIN package_synopsis
ON package_synopsis.id = ANY (package_synopsis_sets.synopsis_ids)
ORDER BY package_synopsis_sets.id,
CASE WHEN package_synopsis.locale = 'en_US.utf8' THEN 1
ELSE 2
END DESC
) AS translated_package_synopsis
ON package_metadata.package_synopsis_set_id =
translated_package_synopsis.package_synopsis_set_id
AND (translated_package_descriptions.locale =
translated_package_synopsis.locale
OR translated_package_descriptions.locale = 'en_US.utf8')
WHERE package_metadata.id IN ("
(string-join
(map number->string
package-metadata-ids) ", ") ")"
"
ORDER BY package_metadata.id, locale,
CASE WHEN translated_package_synopsis.locale =
translated_package_descriptions.locale THEN 1
ELSE 0
END DESC;"))
(exec-query conn query))

View file

@ -365,28 +365,30 @@ WHERE table_name = $1"
(exec-query conn (insert-sql missing-entries)))))
(new-entries-lookup-vhash
(two-lists->vhash missing-entries
new-entries)))
(if sets-of-data?
(map (lambda (field-value-lists)
;; Normalise the result at this point, ensuring that the id's
;; in the set are sorted
(sort
(map (lambda (field-values)
(cdr
(or (vhash-assoc (normalise-values field-values)
existing-entries)
(vhash-assoc field-values
new-entries-lookup-vhash)
(error "missing entry" field-values))))
field-value-lists)
<))
data)
(map (lambda (field-values)
(cdr
(or (vhash-assoc (normalise-values field-values)
existing-entries)
(vhash-assoc field-values
new-entries-lookup-vhash)
(error "missing entry" field-values))))
data))))
new-entries))
(all-ids
(if sets-of-data?
(map (lambda (field-value-lists)
;; Normalise the result at this point, ensuring that the id's
;; in the set are sorted
(sort
(map (lambda (field-values)
(cdr
(or (vhash-assoc (normalise-values field-values)
existing-entries)
(vhash-assoc field-values
new-entries-lookup-vhash)
(error "missing entry" field-values))))
field-value-lists)
<))
data)
(map (lambda (field-values)
(cdr
(or (vhash-assoc (normalise-values field-values)
existing-entries)
(vhash-assoc field-values
new-entries-lookup-vhash)
(error "missing entry" field-values))))
data))))
(values all-ids
new-entries)))