Add some basic pagination to the packages page

Lower powered devices will have problems displaying all ~9000+ packages, so
return a smaller number by default.
This commit is contained in:
Christopher Baines 2019-05-12 19:51:44 +01:00
parent 8eac26b17d
commit 0bdc555ff8
3 changed files with 93 additions and 26 deletions

View file

@ -28,25 +28,46 @@
"packages.version = vals.version AND "
"packages.package_metadata_id = vals.package_metadata_id"))
(define (select-packages-in-revision conn commit-hash)
(define* (select-packages-in-revision conn commit-hash
#:key limit-results
after-name)
(define query
"
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
)
ORDER BY packages.name, packages.version")
(string-append "
WITH data AS (
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
)
ORDER BY packages.name, packages.version
), package_names AS (
SELECT DISTINCT name
FROM data"
(if after-name
"\nWHERE name > $2\n"
"")
" ORDER BY name"
(if limit-results
(string-append " LIMIT " (number->string limit-results))
"")
")
SELECT data.*
FROM data
WHERE data.name IN (SELECT name FROM package_names);"))
(exec-query conn query (list commit-hash)))
(exec-query conn query
`(,commit-hash
,@(if after-name
(list after-name)
'()))))
(define (count-packages-in-revision conn commit-hash)
(define query