40 lines
1.2 KiB
Scheme
40 lines
1.2 KiB
Scheme
(define-module (guix-data-service model guix-revision)
|
|
#:use-module (ice-9 match)
|
|
#:use-module (squee)
|
|
#:export (most-recent-n-guix-revisions
|
|
commit->revision-id
|
|
insert-guix-revision
|
|
guix-revision-exists?))
|
|
|
|
(define (most-recent-n-guix-revisions conn n)
|
|
(exec-query conn "SELECT * FROM guix_revisions ORDER BY id DESC LIMIT 10"))
|
|
|
|
(define (commit->revision-id conn commit)
|
|
(match (exec-query
|
|
conn "SELECT id FROM guix_revisions WHERE commit = $1 LIMIT 1"
|
|
(list commit))
|
|
(((id))
|
|
id)
|
|
(() #f)))
|
|
|
|
(define (insert-guix-revision conn url commit store_path)
|
|
(define insert
|
|
(string-append "INSERT INTO guix_revisions "
|
|
"(url, commit, store_path) VALUES "
|
|
"('" url "', '"
|
|
commit "', '"
|
|
store_path "') "
|
|
"RETURNING id;"))
|
|
|
|
(map car (exec-query conn insert)))
|
|
|
|
(define (guix-revision-exists? conn url commit)
|
|
(define query
|
|
(string-append "SELECT EXISTS("
|
|
"SELECT 1 FROM guix_revisions WHERE url = '" url "' "
|
|
"AND commit = '" commit "')"
|
|
";"))
|
|
|
|
(let ((result (caar
|
|
(exec-query conn query))))
|
|
(string=? result "t")))
|