具有默认值的选择键

时间:2019-02-05 12:15:55

标签: clojure

是否有类似select-keys的功能,但缺少键的默认值?

我要问的原因是我正在使用korma查询数据库。我发现了一个错误,即在没有匹配项时使用select-keys并不直观。

示例:

(delete t
  (where
    (select-keys {:k1 "v1" :k2 "v2"} [:k1])))

与:

(delete t
  (where {:k1 "v1"}))

通过科尔马翻译成类似以下内容的

delete from t where k1='v1'

好。 select-keys仅创建我想要的查询映射。

但是

(delete t
  (where
    (select-keys {:k2 "v2"} [:k1])))

与:

(delete t
  (where {}))

通过科尔马翻译成类似以下内容的

delete from t

这将删除我的整个表t:(

我曾考虑过使用(merge defaults (select-keys ...))或创建函数select-keys-with-default,但我觉得像(get m :blah "default")可能应该缺少一些内置的东西。

浏览文档或提供的相关功能并没有显示出任何有用的现成的信息。

1 个答案:

答案 0 :(得分:2)

当选择为空时,您可能根本不想执行查询。所以像这样的事情可能会做:

(when-let [selection (not-empty (select-keys ...))]
  (delete t (where selection)))