database: query->bind-arguments: Process ^ and $ characters.

* src/cuirass/database.scm (query->bind-arguments): Handle ^ and $ characters
in query strings.
This commit is contained in:
Ricardo Wurmus 2019-06-20 23:31:34 +02:00
parent d5b827097b
commit fed15b83b0
No known key found for this signature in database
GPG Key ID: 197A5888235FACAC
1 changed files with 24 additions and 10 deletions

View File

@ -559,16 +559,30 @@ WHERE derivation =" derivation ";"))
(define (query->bind-arguments query-string)
"Return a list of keys to query strings by parsing QUERY-STRING."
(let ((args (append-map (lambda (token)
(match (string-split token #\:)
(("system" system)
`(#:system ,system))
(("spec" spec)
`(#:spec ,spec))
((_ invalid) '()) ; ignore
((query)
`(#:query ,(string-append query "-%")))))
(string-tokenize query-string))))
(let ((args (append-map
(lambda (token)
(match (string-split token #\:)
(("system" system)
`(#:system ,system))
(("spec" spec)
`(#:spec ,spec))
((_ invalid) '()) ; ignore
((query)
`(#:query
,(fold
(lambda (transform val)
(match transform
((pred modify-true modify-false)
((if (pred val) modify-true modify-false) val))))
query
;; Process special characters ^ and $.
(list (list (cut string-prefix? "^" <>)
(cut string-drop <> 1)
(cut string-append "%" <>))
(list (cut string-suffix? "$" <>)
(cut string-drop-right <> 1)
(cut string-append <> "%"))))))))
(string-tokenize query-string))))
;; Normalize arguments
(fold (lambda (key acc)
(if (member key acc)