Add a function for searching for packages

This commit is contained in:
Christopher Baines 2019-05-12 21:16:10 +01:00
parent 0bdc555ff8
commit 4a5f42ee52
1 changed files with 31 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#:use-module (guix-data-service model utils)
#:export (select-existing-package-entries
select-packages-in-revision
search-packages-in-revision
count-packages-in-revision
insert-into-package-entries
inferior-packages->package-ids))
@ -69,6 +70,36 @@ WHERE data.name IN (SELECT name FROM package_names);"))
(list after-name)
'()))))
(define* (search-packages-in-revision conn commit-hash
search-query
#:key limit-results)
(define query
(string-append
"
SELECT packages.name,
packages.version,
package_metadata.synopsis
FROM packages
INNER JOIN package_metadata
ON packages.package_metadata_id = package_metadata.id
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
INNER JOIN guix_revisions
ON guix_revision_package_derivations.revision_id = guix_revisions.id
WHERE guix_revisions.commit = $1
)
AND to_tsvector(name || ' ' || synopsis) @@ plainto_tsquery($2)
ORDER BY ts_rank_cd(to_tsvector(name || ' ' || synopsis), plainto_tsquery($2)) DESC"
(if limit-results
(string-append "\nLIMIT " (number->string limit-results))
"")))
(exec-query conn query
(list commit-hash search-query)))
(define (count-packages-in-revision conn commit-hash)
(define query
"