Add transducer arity to reduce-sql
This commit is contained in:
parent
15f73f9442
commit
18a511b1c9
1 changed files with 17 additions and 12 deletions
|
|
@ -659,11 +659,16 @@
|
||||||
:else
|
:else
|
||||||
(format-expr x)))
|
(format-expr x)))
|
||||||
|
|
||||||
(defn- reduce-sql [xs]
|
(defn- reduce-sql
|
||||||
(reduce (fn [[sql params] [sql' & params']]
|
([xs] (reduce-sql identity xs))
|
||||||
[(conj sql sql') (if params' (into params params') params)])
|
([xform xs]
|
||||||
|
(transduce xform
|
||||||
|
(fn
|
||||||
|
([res] res)
|
||||||
|
([[sql params] [sql' & params']]
|
||||||
|
[(conj sql sql') (if params' (into params params') params)]))
|
||||||
[[] []]
|
[[] []]
|
||||||
xs))
|
xs)))
|
||||||
|
|
||||||
;; primary clauses
|
;; primary clauses
|
||||||
|
|
||||||
|
|
@ -733,7 +738,7 @@
|
||||||
(throw (ex-info (str "format-expr-list expects a sequence of expressions, found: "
|
(throw (ex-info (str "format-expr-list expects a sequence of expressions, found: "
|
||||||
(type exprs))
|
(type exprs))
|
||||||
{:exprs exprs})))
|
{:exprs exprs})))
|
||||||
(reduce-sql (map #(format-expr % opts) exprs)))
|
(reduce-sql (map #(format-expr % opts)) exprs))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(format-expr-list :?tags)
|
(format-expr-list :?tags)
|
||||||
|
|
@ -753,7 +758,7 @@
|
||||||
(cond-> prefix qualifier (str " " qualifier))
|
(cond-> prefix qualifier (str " " qualifier))
|
||||||
qualifier)]
|
qualifier)]
|
||||||
(if (sequential? xs)
|
(if (sequential? xs)
|
||||||
(let [[sqls params] (reduce-sql (map #(format-selectable-dsl % {:as as}) xs))]
|
(let [[sqls params] (reduce-sql (map #(format-selectable-dsl % {:as as})) xs)]
|
||||||
(when-not (= :none *checking*)
|
(when-not (= :none *checking*)
|
||||||
(when (empty? xs)
|
(when (empty? xs)
|
||||||
(throw (ex-info (str prefix " empty column list is illegal")
|
(throw (ex-info (str prefix " empty column list is illegal")
|
||||||
|
|
@ -851,8 +856,8 @@
|
||||||
;; according to docs, CTE should _always_ be wrapped:
|
;; according to docs, CTE should _always_ be wrapped:
|
||||||
(cond-> [(str sql " " (as-fn with) " " (str "(" sql' ")"))]
|
(cond-> [(str sql " " (as-fn with) " " (str "(" sql' ")"))]
|
||||||
params (into params)
|
params (into params)
|
||||||
params' (into params')))))
|
params' (into params'))))))
|
||||||
xs))]
|
xs)]
|
||||||
(into [(str (sql-kw k) " " (join ", " sqls))] params)))
|
(into [(str (sql-kw k) " " (join ", " sqls))] params)))
|
||||||
|
|
||||||
(defn- format-selector [k xs]
|
(defn- format-selector [k xs]
|
||||||
|
|
@ -880,7 +885,7 @@
|
||||||
[table])
|
[table])
|
||||||
[sql & params] (format-dsl statement)
|
[sql & params] (format-dsl statement)
|
||||||
[t-sql & t-params] (format-entity-alias table)
|
[t-sql & t-params] (format-entity-alias table)
|
||||||
[c-sqls c-params] (reduce-sql (map #'format-entity-alias cols))]
|
[c-sqls c-params] (reduce-sql (map #'format-entity-alias) cols)]
|
||||||
(-> [(str (sql-kw k) " " t-sql
|
(-> [(str (sql-kw k) " " t-sql
|
||||||
" "
|
" "
|
||||||
(cond (seq cols)
|
(cond (seq cols)
|
||||||
|
|
@ -898,7 +903,7 @@
|
||||||
(sequential? (second table))
|
(sequential? (second table))
|
||||||
(let [[table cols] table
|
(let [[table cols] table
|
||||||
[t-sql & t-params] (format-entity-alias table)
|
[t-sql & t-params] (format-entity-alias table)
|
||||||
[c-sqls c-params] (reduce-sql (map #'format-entity-alias cols))]
|
[c-sqls c-params] (reduce-sql (map #'format-entity-alias) cols)]
|
||||||
(-> [(str (sql-kw k) " " t-sql
|
(-> [(str (sql-kw k) " " t-sql
|
||||||
" ("
|
" ("
|
||||||
(join ", " c-sqls)
|
(join ", " c-sqls)
|
||||||
|
|
@ -1974,7 +1979,7 @@
|
||||||
:else ; args is empty and not a special case
|
:else ; args is empty and not a special case
|
||||||
[])
|
[])
|
||||||
[sqls params]
|
[sqls params]
|
||||||
(reduce-sql (map #(format-expr % {:nested true}) args))]
|
(reduce-sql (map #(format-expr % {:nested true})) args)]
|
||||||
(when-not (pos? (count sqls))
|
(when-not (pos? (count sqls))
|
||||||
(throw (ex-info (str "no operands found for " op')
|
(throw (ex-info (str "no operands found for " op')
|
||||||
{:expr expr})))
|
{:expr expr})))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue