From 4c75db9a95f504e3ff8350a80a19697efe26b30b Mon Sep 17 00:00:00 2001 From: Oleksandr Yakushev Date: Fri, 27 Sep 2024 12:57:44 +0300 Subject: [PATCH] Miscellaneous improvements --- src/honey/sql.cljc | 56 +++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/src/honey/sql.cljc b/src/honey/sql.cljc index f5ca8c3..b8a1411 100644 --- a/src/honey/sql.cljc +++ b/src/honey/sql.cljc @@ -691,7 +691,9 @@ * [:overlay :foo :*placing :?subs :*from 3 :*for 4] * [:trim :*leading-from :bar]" [args & [opts]] - (loop [exprs (map #(format-expr % opts) (remove inline-kw? args)) + (loop [exprs (keep #(when-not (inline-kw? %) + (format-expr % opts)) + args) args args prev-in false result []] @@ -933,29 +935,33 @@ (defn- format-join [k clauses] (let [[sqls params] - (reduce (fn [[sqls params] [j e]] - (let [[sql-j & params-j] - (format-selects-common - (sql-kw (if (= :join k) :inner-join k)) - true - [j]) - sqls (conj sqls sql-j)] - (if (and (sequential? e) (= :using (first e))) - (let [[u-sqls u-params] - (reduce-sql (map #'format-entity-alias (rest e)))] - [(conj sqls - "USING" - (str "(" - (join ", " u-sqls) - ")")) - (-> params (into params-j) (into u-params))]) - (let [[sql & params'] (when e (format-expr e))] - [(cond-> sqls e (conj "ON" sql)) - (-> params - (into params-j) - (into params'))])))) - [[] []] - (partition-all 2 clauses))] + (transduce + (partition-all 2) + (fn + ([res] res) + ([[sqls params] [j e]] + (let [[sql-j & params-j] + (format-selects-common + (sql-kw (if (= :join k) :inner-join k)) + true + [j]) + sqls (conj sqls sql-j)] + (if (and (sequential? e) (= :using (first e))) + (let [[u-sqls u-params] + (reduce-sql (map #'format-entity-alias) (rest e))] + [(conj sqls + "USING" + (str "(" + (join ", " u-sqls) + ")")) + (-> params (into params-j) (into u-params))]) + (let [[sql & params'] (when e (format-expr e))] + [(cond-> sqls e (conj "ON" sql)) + (-> params + (into params-j) + (into params'))]))))) + [[] []] + clauses)] (into [(join " " sqls)] params))) (def ^:private join-by-aliases @@ -1969,7 +1975,7 @@ (defn- format-infix-expr [op' op expr nested] (let [args (cond->> (rest expr) (contains? @op-ignore-nil op) - (remove nil?)) + (filterv some?)) args (cond (seq args) args (= :and op)