起初我对clojure真的很陌生。所以,我试图用honeysql动态组合查询:
(:use [honeysql.core :as sql]
[honeysql.helpers :refer :all])
(sql/format {:select [:*] :from [:test]
:where [:or [:= :name "foo"]
[:= :name "bar"]]})
;; ["SELECT * FROM test WHERE (name = ? OR name = ?)" "foo" "bar"]
我有函数构建子句:
(defn build-clause [names]
[:or (map #(vector := :name %) names)])
(sql/format {:select [:*]
:from [:test]
:where (build-clause ["foo" "bar"])})
;; ClassCastException clojure.lang.PersistentVector cannot be cast to clojure.lang.Named
我认为问题在于返回的构建子句函数
[:or ([:= :name "foo"] [:= :name "bar"])]
我想要这个:
[:or [:= :name "foo"] [:= :name :bar]]
请问我应该如何以正确的方式重写构建子句?什么样的列表展开?