首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Korma:动态生成where子句

Korma:动态生成where子句
EN

Stack Overflow用户
提问于 2014-07-14 17:02:12
回答 1查看 116关注 0票数 0

我有一组动态生成的参数,其形式如下

代码语言:javascript
复制
(def clauses {:apples 23 :plums 0 :bananas 7})

我希望在where语句中使用它或“‘ed”,因此它应该成为相当于Korma查询的内容:

代码语言:javascript
复制
(select fruit-shop
  (where (or {:apples 23}
             {:plums 0}
             {:bananas 7})))

生成地图列表非常容易:

代码语言:javascript
复制
(map #(apply array-map %)
     (into [] clauses))

但是不能使用应用到它的(or语句,因为它是在宏展开时处理的,在clauses被绑定到它的值之前。

在这种情况下应该使用什么声明?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 18:56:19

在熟悉了Korma源代码之后,我找到了korma.sql.fns/pred-or函数来代替wherehaving中的or语句。因此,我编写了下面的助手函数,它接受一个map参数

代码语言:javascript
复制
(require '[korma.sql.fns :refer [pred-or]])

(defn or*
  [m]
  (apply pred-or
         (map #(apply array-map %)
              (into [] m))))

既然如此,预期的查询将如下所示

代码语言:javascript
复制
(select fruit-shop
  (where (or* clauses)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24741843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档