aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/derivation.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-03-17 22:44:09 +0000
committerChristopher Baines <mail@cbaines.net>2019-03-17 22:44:09 +0000
commit189014f3bc5a9526970ec3bf86104fd92f43bef6 (patch)
tree6e43c4b4e91f94685b9ad1bcf7959ee1db896770 /guix-data-service/model/derivation.scm
parent0d16c87da89372f6d813a753f309f8e3b0a42e18 (diff)
downloaddata-service-189014f3bc5a9526970ec3bf86104fd92f43bef6.tar
data-service-189014f3bc5a9526970ec3bf86104fd92f43bef6.tar.gz
Improve the compare derivations page
Add support for filtering the results, and add the system and target to the output.
Diffstat (limited to 'guix-data-service/model/derivation.scm')
-rw-r--r--guix-data-service/model/derivation.scm56
1 files changed, 46 insertions, 10 deletions
diff --git a/guix-data-service/model/derivation.scm b/guix-data-service/model/derivation.scm
index 3104059..7a710de 100644
--- a/guix-data-service/model/derivation.scm
+++ b/guix-data-service/model/derivation.scm
@@ -8,7 +8,8 @@
#:use-module (guix memoization)
#:use-module (guix derivations)
#:use-module (guix-data-service model utils)
- #:export (select-derivation-by-file-name
+ #:export (valid-systems
+ select-derivation-by-file-name
select-derivation-outputs-by-derivation-id
select-derivation-by-output-filename
select-derivations-using-output
@@ -16,10 +17,16 @@
select-derivation-inputs-by-derivation-id
select-existing-derivations
select-derivations-by-id
- select-derivations-and-build-status-by-file-name
+ select-derivations-and-build-status
insert-into-derivations
derivation-file-names->derivation-ids))
+(define (valid-systems conn)
+ (map car
+ (exec-query
+ conn
+ "SELECT DISTINCT system FROM derivations ORDER BY 1")))
+
(define (select-existing-derivations file-names)
(string-append "SELECT id, file_name "
"FROM derivations "
@@ -462,11 +469,45 @@ ORDER BY derivations.system DESC,
(exec-query conn query))
-(define (select-derivations-and-build-status-by-file-name conn file-names)
+(define* (select-derivations-and-build-status conn #:key
+ file-names
+ systems
+ targets
+ build-statuses)
+ (define criteria
+ (string-join
+ (filter-map
+ (lambda (field values)
+ (if (and values (not (null? values)))
+ (string-append
+ field " IN ("
+ (string-join (map (lambda (value)
+ (simple-format #f "'~A'" value))
+ values)
+ ",")
+ ")")
+ #f))
+ '("derivations.file_name"
+ "derivations.system"
+ "target"
+ "latest_build_status.status")
+ (list file-names
+ systems
+ targets
+ build-statuses))
+ " AND "))
+
(define query
(string-append
- "SELECT derivations.file_name, latest_build_status.status "
+ "SELECT derivations.file_name, derivations.system, ("
+ " SELECT DISTINCT package_derivations.target"
+ " FROM package_derivations"
+ " WHERE derivations.id = package_derivations.derivation_id"
+ ") AS target, "
+ "latest_build_status.status "
"FROM derivations "
+ "INNER JOIN package_derivations"
+ " ON derivations.id = package_derivations.derivation_id "
"LEFT OUTER JOIN builds ON derivations.id = builds.derivation_id "
"LEFT OUTER JOIN "
"(SELECT DISTINCT ON (internal_build_id) * "
@@ -474,12 +515,7 @@ ORDER BY derivations.system DESC,
"ORDER BY internal_build_id, status_fetched_at DESC"
") AS latest_build_status "
"ON builds.internal_id = latest_build_status.internal_build_id "
- "WHERE derivations.file_name IN "
- "(" (string-join (map (lambda (file-name)
- (simple-format #f "'~A'" file-name))
- file-names)
- ",")
- ");"))
+ "WHERE " criteria ";"))
(exec-query conn query))