From fed15b83b0b54d17057733935eb53e94e1a2c926 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Thu, 20 Jun 2019 23:31:34 +0200 Subject: database: query->bind-arguments: Process ^ and $ characters. * src/cuirass/database.scm (query->bind-arguments): Handle ^ and $ characters in query strings. --- src/cuirass/database.scm | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index f74ebdd..8db5411 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -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) -- cgit v1.2.3