aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-07-04 11:24:11 +0100
committerChristopher Baines <mail@cbaines.net>2020-07-04 11:24:11 +0100
commit804edead119569296e090a3382b8769e48659be2 (patch)
tree15dabe3d451b298e082e46c6638de07f7ef45d07
parent9f97641466d6abb5898ef2fc7d584e8ba5d0496a (diff)
downloadbuild-coordinator-804edead119569296e090a3382b8769e48659be2.tar
build-coordinator-804edead119569296e090a3382b8769e48659be2.tar.gz
Add datastore-list-builds-for-output-and-system
-rw-r--r--guix-build-coordinator/datastore.scm1
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm38
2 files changed, 39 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm
index 1c3a458..607a412 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -50,6 +50,7 @@
(re-export datastore-find-derivation-system)
(re-export datastore-find-derivation-inputs)
(re-export datastore-list-builds-for-output)
+(re-export datastore-list-builds-for-output-and-system)
(re-export datastore-agent-for-build)
(re-export datastore-count-build-allocation-plan-entries)
(re-export datastore-replace-build-allocation-plan)
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index 960b49c..801f895 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -42,6 +42,7 @@
datastore-find-derivation-inputs
datastore-find-derivation-outputs
datastore-list-builds-for-output
+ datastore-list-builds-for-output-and-system
datastore-new-agent-password
datastore-agent-password-exists?
datastore-list-processed-builds
@@ -971,6 +972,43 @@ WHERE derivation_outputs.output = :output"
result)))))))
+(define-method (datastore-list-builds-for-output-and-system
+ (datastore <sqlite-datastore>)
+ output
+ system)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+SELECT uuid, builds.derivation_name
+FROM builds
+INNER JOIN derivation_outputs
+ ON builds.derivation_name = derivation_outputs.derivation_name
+INNER JOIN derivations
+ ON builds.derivation_name = derivations.name
+WHERE derivation_outputs.output = :output
+ AND derivations.system = :system"
+ #:cache? #t)))
+
+ (sqlite-bind-arguments
+ statement
+ #:output output
+ #:system system)
+
+ (let ((result
+ (sqlite-map
+ (match-lambda
+ (#(uuid derivation)
+ `((uuid . ,uuid)
+ (derivation . ,derivation))))
+ statement)))
+ (sqlite-reset statement)
+
+ result)))))
+
(define-method (datastore-list-builds-for-derivation
(datastore <sqlite-datastore>)
derivation)