[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)