我正在尝试根据传递给函数的列和值的映射生成 korma 查询条件。
我发现当一张空地图被传递到 korma's where 时:
(select "things"
(where conditions))
生成带有空 WHERE 的查询,这会导致 SQL 错误:
SELECT * FROM things WHERE () LIMIT 10
但是使用这种形式:
(select "things"
(if-not (empty? conditions)
(where conditions)))
导致错误:“传递给的参数 (1) 数量错误:core$where”
是否有一种惯用的方式来处理 korma 中的动态子句?
更新
以下工作,但很笨拙(注意奇怪的必要 if 格式)
(defn do-select []
(-> (select* "things")
(fields :id :data)
(limit 10)))
(defn add-constraints [query conditions]
(if (empty? conditions)
query
(where query (conditions-to-clause-map conditions))))
(select (do-select)
(add-constraints conditions)
(where (is_owner? owner)))