aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-05-08 21:24:52 +0100
committerChristopher Baines <mail@cbaines.net>2020-05-08 21:24:52 +0100
commit9166d4ab0d5ff28319630194a0d041a483746e0e (patch)
treed152b1dce3b01601691b53becba178a6091793e4 /guix-build-coordinator
parent35f375b77fc49a55cadf5da654b1bf3af908d649 (diff)
downloadbuild-coordinator-9166d4ab0d5ff28319630194a0d041a483746e0e.tar
build-coordinator-9166d4ab0d5ff28319630194a0d041a483746e0e.tar.gz
Add datastore-list-builds-for-derivation-recursive-inputs
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/datastore.scm1
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm39
2 files changed, 40 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm
index 9f09bce..0479ca4 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -21,6 +21,7 @@
(re-export datastore-fetch-setup-failures)
(re-export datastore-list-build-outputs)
(re-export datastore-list-related-derivations-with-no-build)
+(re-export datastore-list-builds-for-derivation-recursive-inputs)
(re-export datastore-store-setup-failure)
(re-export datastore-store-setup-failure/missing-inputs)
(re-export datastore-list-setup-failure-missing-inputs)
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index 421b9b9..c33c1aa 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -13,6 +13,7 @@
datastore-update
datastore-store-derivation
datastore-list-related-derivations-with-no-build
+ datastore-list-builds-for-derivation-recursive-inputs
datastore-store-build
datastore-count-builds
datastore-find-build
@@ -273,6 +274,44 @@ WHERE name != :derivation
result)))))
+(define-method (datastore-list-builds-for-derivation-recursive-inputs
+ (datastore <sqlite-datastore>)
+ derivation)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+WITH RECURSIVE related_derivations(name) AS (
+ VALUES(:derivation)
+UNION
+ SELECT derivation_outputs.derivation_name
+ FROM derivation_outputs
+ INNER JOIN derivation_inputs
+ ON derivation_outputs.id = derivation_inputs.derivation_output_id
+ INNER JOIN related_derivations
+ ON related_derivations.name = derivation_inputs.derivation_name
+)
+SELECT builds.uuid
+FROM builds
+INNER JOIN related_derivations
+ ON related_derivations.name = builds.derivation_name"
+ #:cache? #t)))
+
+ (sqlite-bind-arguments
+ statement
+ #:derivation derivation)
+
+ (let ((result (sqlite-map
+ (match-lambda
+ (#(uuid) uuid))
+ statement)))
+ (sqlite-reset statement)
+
+ result)))))
+
(define-method (datastore-store-build
(datastore <sqlite-datastore>)
derivation-name