diff options
Diffstat (limited to 'nar-herder/database.scm')
-rw-r--r-- | nar-herder/database.scm | 34 |
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 |