aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/package.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-05-12 19:51:44 +0100
committerChristopher Baines <mail@cbaines.net>2019-05-12 20:45:33 +0100
commit0bdc555ff8645869bdfdf3710038f135403c052c (patch)
treedfdda4210863681031e74e4594a4d37a6fb205d8 /guix-data-service/model/package.scm
parent8eac26b17d996e3e171c92e43536333daf72b7c9 (diff)
downloaddata-service-0bdc555ff8645869bdfdf3710038f135403c052c.tar
data-service-0bdc555ff8645869bdfdf3710038f135403c052c.tar.gz
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.
Diffstat (limited to 'guix-data-service/model/package.scm')
-rw-r--r--guix-data-service/model/package.scm55
1 files changed, 38 insertions, 17 deletions
diff --git a/guix-data-service/model/package.scm b/guix-data-service/model/package.scm
index 4d15e73..7cb1683 100644
--- a/guix-data-service/model/package.scm
+++ b/guix-data-service/model/package.scm
@@ -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