From 804edead119569296e090a3382b8769e48659be2 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 4 Jul 2020 11:24:11 +0100 Subject: Add datastore-list-builds-for-output-and-system --- guix-build-coordinator/datastore.scm | 1 + guix-build-coordinator/datastore/sqlite.scm | 38 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) 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 ) + 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 ) derivation) -- cgit v1.2.3