aboutsummaryrefslogtreecommitdiff
path: root/nar-herder/database.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-02-03 18:09:40 +0100
committerChristopher Baines <mail@cbaines.net>2023-02-03 18:09:40 +0100
commit050a40e7a3c748eb3b1e82560627a58535fbcfce (patch)
tree391e95d848d71498bf0bd85c78a07bda04b5abdf /nar-herder/database.scm
parent550e6aa414ec143435a8ace061c17e34dcfb4eec (diff)
downloadnar-herder-050a40e7a3c748eb3b1e82560627a58535fbcfce.tar
nar-herder-050a40e7a3c748eb3b1e82560627a58535fbcfce.tar.gz
Add procedure to select narinfo details by hash
Diffstat (limited to 'nar-herder/database.scm')
-rw-r--r--nar-herder/database.scm34
1 files changed, 34 insertions, 0 deletions
diff --git a/nar-herder/database.scm b/nar-herder/database.scm
index 1730595..c4d20f2 100644
--- a/nar-herder/database.scm
+++ b/nar-herder/database.scm
@@ -42,6 +42,7 @@
database-insert-narinfo
database-remove-narinfo
+ database-select-narinfo-by-hash
database-select-narinfo-contents-by-hash
database-select-recent-changes
@@ -748,6 +749,39 @@ DELETE FROM narinfo_tags WHERE narinfo_id = :narinfo_id"
#t))))
+(define (database-select-narinfo-by-hash database hash)
+ (call-with-time-tracking
+ database
+ "select_narinfo_by_hash"
+ (lambda ()
+ (call-with-worker-thread
+ (database-reader-thread-channel database)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+SELECT id, store_path, nar_hash, nar_size, deriver, system
+FROM narinfos
+WHERE substr(store_path, 12, 32) = :hash"
+ #:cache? #t)))
+ (sqlite-bind-arguments
+ statement
+ #:hash hash)
+
+ (match (let ((result (sqlite-step statement)))
+ (sqlite-reset statement)
+ result)
+ (#(id store_path nar_hash nar_size deriver system)
+ `((id . ,id)
+ (store-path . ,store_path)
+ (nar-hash . ,nar_hash)
+ (nar-size . ,nar_size)
+ (deriver . ,deriver)
+ (system . ,system)))
+ (_
+ #f))))))))
+
(define (database-select-narinfo-contents-by-hash database hash)
(call-with-time-tracking
database