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 jobs load-new-guix-revision)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (ice-9 match)
#:use-module (ice-9 threads)
#:use-module (ice-9 textual-ports)
@ -732,18 +733,23 @@ WHERE job_id = $1"
conn
(inferior-packages->license-id-lists
conn
(inferior-packages->license-data inf packages)))))
(packages-metadata-ids
(with-time-logging "fetching inferior package metadata"
(inferior-packages->package-metadata-ids
conn inf packages package-license-set-ids))))
(inferior-packages->license-data inf packages))))))
(let*-values
(((all-package-metadata-ids new-package-metadata-ids)
(with-time-logging "fetching inferior package metadata"
(inferior-packages->package-metadata-ids
conn inf packages package-license-set-ids))))
(with-time-logging "getting package-ids"
(inferior-packages->package-ids
conn
(zip (map inferior-package-name packages)
(map inferior-package-version packages)
packages-metadata-ids)))))
(with-time-logging "fetching package metadata tsvector entries"
(insert-package-metadata-tsvector-entries
conn new-package-metadata-ids))
(with-time-logging "getting package-ids"
(inferior-packages->package-ids
conn
(zip (map inferior-package-name packages)
(map inferior-package-version packages)
all-package-metadata-ids))))))
(define (insert-lint-warnings conn inferior-package-id->package-database-id
lint-checker-ids

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)))