aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 3de6fbd..e59197a 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -15,6 +15,7 @@
(re-export datastore-find-agent)
(re-export datastore-store-build-result)
(re-export datastore-fetch-setup-failures)
+(re-export datastore-list-build-outputs)
(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 109e162..9ca552d 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -14,6 +14,7 @@
datastore-store-build
datastore-find-build
datastore-store-build-result
+ datastore-list-build-outputs
datastore-new-agent
datastore-list-agents
datastore-find-agent
@@ -831,6 +832,44 @@ WHERE derivation_name = :derivation_name")))
result)))))
+(define-method (datastore-list-build-outputs
+ (datastore <sqlite-datastore>)
+ build-id)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+SELECT name, output, hash, size, store_references
+FROM builds
+INNER JOIN derivation_outputs
+ ON builds.derivation_name = derivation_outputs.derivation_name
+INNER JOIN output_metadata
+ ON output_metadata.derivation_output_id = derivation_outputs.id
+ AND output_metadata.build_id = builds.uuid
+WHERE builds.uuid = :build_id")))
+
+ (sqlite-bind-arguments
+ statement
+ #:build_id build-id)
+
+ (let ((result
+ (sqlite-map
+ (match-lambda
+ (#(name output hash size store_references)
+ `((name . ,name)
+ (output . ,output)
+ (hash . ,hash)
+ (size . ,size)
+ (references . ,(list->vector
+ (string-split store_references #\space))))))
+ statement)))
+ (sqlite-reset statement)
+
+ result)))))
+
(define-method (datastore-find-derivation-system
(datastore <sqlite-datastore>)
derivation-name)