Support case/when/then/else
This commit is contained in:
parent
d1e4e196d0
commit
eff3b03a81
1 changed files with 17 additions and 0 deletions
|
|
@ -483,6 +483,23 @@
|
||||||
(into params-x)
|
(into params-x)
|
||||||
(into params-a)
|
(into params-a)
|
||||||
(into params-b))))
|
(into params-b))))
|
||||||
|
:case
|
||||||
|
(fn [_ clauses]
|
||||||
|
(let [[sqls params]
|
||||||
|
(reduce (fn [[sqls params] [condition value]]
|
||||||
|
(let [[sqlc & paramsc] (when-not (= :else condition)
|
||||||
|
(format-expr condition))
|
||||||
|
[sqlv & paramsv] (format-expr value)]
|
||||||
|
[(if (= :else condition)
|
||||||
|
(conj sqls (sql-kw :else) sqlv)
|
||||||
|
(conj sqls (sql-kw :when) sqlc (sql-kw :then) sqlv))
|
||||||
|
(-> params (into paramsc) (into paramsv))]))
|
||||||
|
[[] []]
|
||||||
|
(partition 2 clauses))]
|
||||||
|
(into [(str (sql-kw :case) " "
|
||||||
|
(str/join " " sqls)
|
||||||
|
" " (sql-kw :end))]
|
||||||
|
params)))
|
||||||
:cast
|
:cast
|
||||||
(fn [_ [x type]]
|
(fn [_ [x type]]
|
||||||
(let [[sql & params] (format-expr x)
|
(let [[sql & params] (format-expr x)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue