From eff3b03a81f9a824e66fdf26d0eafca6278eedb2 Mon Sep 17 00:00:00 2001 From: Sean Corfield Date: Mon, 12 Oct 2020 18:38:05 -0700 Subject: [PATCH] Support case/when/then/else --- src/honey/sql.cljc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/honey/sql.cljc b/src/honey/sql.cljc index 9cb2be0..23623ff 100644 --- a/src/honey/sql.cljc +++ b/src/honey/sql.cljc @@ -483,6 +483,23 @@ (into params-x) (into params-a) (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 (fn [_ [x type]] (let [[sql & params] (format-expr x)