guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Ricardo Wurmus
Date: Thu, 20 Jun 2019 17:34:04 -0400 (EDT)

branch: master
commit fed15b83b0b54d17057733935eb53e94e1a2c926
Author: Ricardo Wurmus <address@hidden>
Date:   Thu Jun 20 23:31:34 2019 +0200

    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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]