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.scm31
1 files changed, 31 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index a20f6ed..bc3dd58 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -1201,6 +1201,12 @@ WHERE uuid = :uuid"
db
"
SELECT id FROM tags WHERE key = :key AND value = :value"
+ #:cache? #t))
+ (key-statement
+ (sqlite-prepare
+ db
+ "
+SELECT id FROM tags WHERE key = :key"
#:cache? #t)))
(lambda (tag not?)
(match tag
@@ -1220,6 +1226,31 @@ SELECT id FROM tags WHERE key = :key AND value = :value"
(#f #f))))
(sqlite-reset statement)
+ result))
+ (key
+ (sqlite-bind-arguments key-statement
+ #:key key)
+
+ (let* ((tag-ids (sqlite-map
+ (match-lambda
+ (#(id) id))
+ key-statement))
+ (result
+ (string-append
+ "("
+ (string-join
+ (map (lambda (id)
+ (simple-format
+ #f "tag_string ~A '%,~A,%'"
+ (if not?
+ "NOT LIKE"
+ "LIKE")
+ id))
+ tag-ids)
+ (if not? " AND " " OR "))
+ ")")))
+ (sqlite-reset key-statement)
+
result))))))
(let ((tag-expressions