2

Does anyone know how this can be accomplished?

(get-lists ["free" "food"]) ->

Select name 
From Lists
Where name like '%free%' and name like '%food%'

I have tried:

-- :name get-lists :? :*
Select id, name
from Lists
where
--~ (clojure.string/join "" (interpose " AND " (map #(str "name LIKE '%" % "%'") :sKeyWords)))

But of course that does not work. Can someone point me in the right direction please?

MaDhAt2r
  • 75
  • 6

2 Answers2

2

Figured out answer. Putting here for anyone else who might need it.

-- :name get-lists :? :*
Select id, name
from Lists
--~ (str "WHERE " 
        (clojure.string/join " AND " (map #(str "name LIKE '%" % "%'") 
          (:key-words params))))
MaDhAt2r
  • 75
  • 6
  • 2
    `(clojure.string/join "" (interpose " AND " [1 2 3]))` is `(clojure.string/join " AND " [1 2 3])` – cfrick Apr 21 '20 at 20:00
2

To form a query you can also use clojure.pprint/cl-format from clojure's standard lib, which is quite powerful and concise:

user> (require '[clojure.pprint :refer [cl-format]])

user> (cl-format nil "WHERE~{ name LIKE '%~a%' ~^AND~}" 
                 ["me" "you" "somebody"])
;;=> "WHERE name LIKE '%me%' AND name LIKE '%you%' AND name LIKE '%somebody%' "
leetwinski
  • 17,408
  • 2
  • 18
  • 42