我有一组动态生成的参数,其形式如下
(def clauses {:apples 23 :plums 0 :bananas 7})我希望在where语句中使用它或“‘ed”,因此它应该成为相当于Korma查询的内容:
(select fruit-shop
(where (or {:apples 23}
{:plums 0}
{:bananas 7})))生成地图列表非常容易:
(map #(apply array-map %)
(into [] clauses))但是不能使用应用到它的(or语句,因为它是在宏展开时处理的,在clauses被绑定到它的值之前。
在这种情况下应该使用什么声明?
发布于 2014-07-14 18:56:19
在熟悉了Korma源代码之后,我找到了korma.sql.fns/pred-or函数来代替where和having中的or语句。因此,我编写了下面的助手函数,它接受一个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)))https://stackoverflow.com/questions/24741843
复制相似问题