我有一组动态生成的参数,如地图形式,如
(def clauses {:apples 23 :plums 0 :bananas 7})
我希望在where
语句中使用它,因此它应该等同于Korma查询:
(select fruit-shop
(where (or {:apples 23}
{:plums 0}
{:bananas 7})))
生成地图列表非常简单:
(map #(apply array-map %)
(into [] clauses))
但是不能使用(or
语句应用于它,因为它在宏扩展时处理,在clauses
绑定到它的值之前。
在这种情况下应该使用什么声明?
答案 0 :(得分:0)
在熟悉Korma源代码后,我发现korma.sql.fns/pred-or
函数替换了or
和where
中的having
语句。所以我编写了以下带有map参数的辅助函数
(require '[korma.sql.fns :refer [pred-or]])
(defn or*
[m]
(apply pred-or
(map #(apply array-map %)
(into [] m))))
鉴于此,预期的查询将如下所示
(select fruit-shop
(where (or* clauses)))