@@ -6,7 +6,7 @@ exec ros -Q -- $0 "$@"
66
77(progn ; ;init forms
88 (ros :ensure-asdf)
9- #+ quicklisp(ql :quickload ' (" str" " split-sequence" ) :silent t )
9+ #+ quicklisp(ql :quickload ' (" str" " split-sequence" " cl-ppcre " ) :silent t )
1010 )
1111
1212
@@ -43,17 +43,26 @@ is replaced with replacement."
4343 :if-does-not-exist :create )
4444 (write-sequence " DEFAULT \" psql -h localhost -d database -U postgres -p 5432\" " f))))
4545
46+ (defun get-filter-strs (filter-list &optional acc)
47+ (let ((whitespacep (ppcre :create-scanner " \s " ))
48+ (first (car filter-list))
49+ (snd (cadr filter-list)))
50+
51+ (if (= 0 (length filter-list))
52+ acc
53+ (if (ppcre :scan whitespacep first ) ; Whitespace indicates an existing filter that should be preserved
54+ (get-filter-strs (cdr filter-list)
55+ (append acc (list first )))
56+
57+ (get-filter-strs (cddr filter-list)
58+ (append acc
59+ (list (format nil " ~A = ~A " first snd))))))))
4660
4761(defun get-filters (filter-list)
48- (let ((filter-pairs (loop :for filter :on filter-list :by #' cddr
49- :collect (cons (car filter) (cadr filter)))))
50- (if (= 0 (length filter-pairs))
62+ (let ((filter-strs (get-filter-strs filter-list)))
63+ (if (= 0 (length filter-strs))
5164 " "
52- (format nil " WHERE~{ ~A ~^ AND~& ~} "
53- (loop :for filter-pair :in filter-pairs
54- :collect (format nil " ~A = ~A "
55- (car filter-pair)
56- (cdr filter-pair)))))))
65+ (format nil " WHERE~{ ~A ~^ AND~& ~} " filter-strs))))
5766
5867(defun print-usage ()
5968 (format t " USAGE: beer-me [environment] <resource> [filters]" ))
0 commit comments