diff options
author | Christopher Baines <mail@cbaines.net> | 2020-05-08 21:24:52 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-05-08 21:24:52 +0100 |
commit | 9166d4ab0d5ff28319630194a0d041a483746e0e (patch) | |
tree | d152b1dce3b01601691b53becba178a6091793e4 | |
parent | 35f375b77fc49a55cadf5da654b1bf3af908d649 (diff) | |
download | build-coordinator-9166d4ab0d5ff28319630194a0d041a483746e0e.tar build-coordinator-9166d4ab0d5ff28319630194a0d041a483746e0e.tar.gz |
Add datastore-list-builds-for-derivation-recursive-inputs
-rw-r--r-- | guix-build-coordinator/datastore.scm | 1 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 39 |
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 |