diff options
author | Christopher Baines <mail@cbaines.net> | 2021-12-29 22:11:59 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-12-29 22:11:59 +0000 |
commit | 28b67c85acefc578536bf849cb748bd9345ee3b9 (patch) | |
tree | 2244c4a9e17993cfb2caa2014d848334db8781e3 /nar-herder/database.scm | |
parent | b7722aed5f91fa7d44343e7ce091e4dccc879430 (diff) | |
download | nar-herder-28b67c85acefc578536bf849cb748bd9345ee3b9.tar nar-herder-28b67c85acefc578536bf849cb748bd9345ee3b9.tar.gz |
Regularly update the database dump and delete recent changes
Diffstat (limited to 'nar-herder/database.scm')
-rw-r--r-- | nar-herder/database.scm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/nar-herder/database.scm b/nar-herder/database.scm index 399d527..e30c82a 100644 --- a/nar-herder/database.scm +++ b/nar-herder/database.scm @@ -44,6 +44,8 @@ database-select-recent-changes database-select-latest-recent-change-datetime + database-get-recent-changes-id-for-deletion + database-delete-recent-changes-with-id-below database-select-narinfo-for-file database-select-narinfo-files @@ -308,6 +310,20 @@ PRAGMA optimize;"))) id))) +(define (changes db) + (let ((statement + (sqlite-prepare + db + "SELECT changes()" + #:cache? #t))) + (let ((id + (vector-ref (sqlite-step statement) + 0))) + + (sqlite-reset statement) + + id))) + (define (database-insert-narinfo database narinfo) (define (insert-narinfo-record db) (let ((statement @@ -481,6 +497,48 @@ SELECT datetime FROM recent_changes ORDER BY datetime DESC LIMIT 1" result))))) +(define (database-get-recent-changes-id-for-deletion database limit) + (call-with-worker-thread + (database-reader-thread-channel database) + (lambda (db) + (let ((statement + (sqlite-prepare + db + " +SELECT id FROM recent_changes ORDER BY datetime DESC LIMIT 1 OFFSET :offset" + #:cache? #t))) + + (sqlite-bind-arguments + statement + #:offset limit) + + (let ((result (match (sqlite-step statement) + (#(id) id) + (#f #f)))) + (sqlite-reset statement) + + result))))) + +(define (database-delete-recent-changes-with-id-below database id) + (call-with-worker-thread + (database-writer-thread-channel database) + (lambda (db) + (let ((statement + (sqlite-prepare + db + " +DELETE FROM recent_changes WHERE id < :id" + #:cache? #t))) + + (sqlite-bind-arguments + statement + #:id id) + + (sqlite-step statement) + (sqlite-reset statement) + + (changes db))))) + (define (database-select-narinfo-for-file database narinfo-file-url) (call-with-worker-thread (database-reader-thread-channel database) |