aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index bbd9c28..a6c93f3 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -80,6 +80,7 @@
datastore-insert-unprocessed-hook-event
datastore-count-unprocessed-hook-events
datastore-list-unprocessed-hook-events
+ datastore-find-unprocessed-hook-event
datastore-delete-unprocessed-hook-event
datastore-list-agent-builds
datastore-agent-for-build
@@ -2480,6 +2481,37 @@ LIMIT :limit"
events)))))
+(define-method (datastore-find-unprocessed-hook-event
+ (datastore <sqlite-datastore>)
+ id)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+SELECT event, arguments
+FROM unprocessed_hook_events
+WHERE id = :id"
+ #:cache? #t)))
+
+ (sqlite-bind-arguments
+ statement
+ #:id id)
+
+ (let ((result
+ (match (sqlite-step statement)
+ (#f #f)
+ (#(event arguments)
+ (list (string->symbol event)
+ (call-with-input-string arguments
+ (lambda (port)
+ (read port))))))))
+ (sqlite-reset statement)
+
+ result)))))
+
(define-method (datastore-delete-unprocessed-hook-event
(datastore <sqlite-datastore>)
id)