diff options
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 31 |
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 |