This commit is contained in:
Brandon Adams 2015-03-26 23:50:09 +00:00
commit ba00038c1e

View file

@ -38,6 +38,11 @@
(def ^:dynamic *subquery?* false) (def ^:dynamic *subquery?* false)
(def ^:dynamic *handling-values* false)
(def ^:dynamic *enable-values-subqueries?*
"When False, subqueries are not computed for IPersistentMap values"
true)
(def ^:private quote-fns (def ^:private quote-fns
{:ansi #(str \" % \") {:ansi #(str \" % \")
:mysql #(str \` % \`) :mysql #(str \` % \`)
@ -226,7 +231,11 @@
*param-names* (atom []) *param-names* (atom [])
*input-params* (atom params) *input-params* (atom params)
*quote-identifier-fn* (quote-fns (:quoting opts)) *quote-identifier-fn* (quote-fns (:quoting opts))
*parameterizer* (parameterizers (or (:parameterizer opts) :jdbc))] *parameterizer* (parameterizers (or (:parameterizer opts) :jdbc))
*enable-values-subqueries?* (if-some
[?enable-values-subqueries (:enable-values-subqueries? opts)]
?enable-values-subqueries
*enable-values-subqueries?*)]
(let [sql-str (to-sql sql-map)] (let [sql-str (to-sql sql-map)]
(if (seq @*params*) (if (seq @*params*)
(if (:return-param-names opts) (if (:return-param-names opts)
@ -292,6 +301,12 @@
(-to-sql [x] (.s x)) (-to-sql [x] (.s x))
clojure.lang.IPersistentMap clojure.lang.IPersistentMap
(-to-sql [x] (-to-sql [x]
(if (and *handling-values*
(not *enable-values-subqueries?*))
(let [pname (keyword (str "_" (swap! *param-counter* inc)))]
(swap! *param-names* conj pname)
(swap! *params* conj x)
(*parameterizer*))
(let [clause-ops (sort-clauses (keys x)) (let [clause-ops (sort-clauses (keys x))
sql-str (binding [*subquery?* true sql-str (binding [*subquery?* true
*fn-context?* false] *fn-context?* false]
@ -300,7 +315,7 @@
clause-ops)))] clause-ops)))]
(if *subquery?* (if *subquery?*
(paren-wrap sql-str) (paren-wrap sql-str)
sql-str))) sql-str))))
nil nil
(-to-sql [x] "NULL") (-to-sql [x] "NULL")
Object Object
@ -425,8 +440,9 @@
(str "(" (comma-join (map to-sql x)) ")")))) (str "(" (comma-join (map to-sql x)) ")"))))
(str (str
"(" (comma-join (map to-sql (keys (first values)))) ") VALUES " "(" (comma-join (map to-sql (keys (first values)))) ") VALUES "
(binding [*handling-values* true]
(comma-join (for [x values] (comma-join (for [x values]
(str "(" (comma-join (map to-sql (vals x))) ")")))))) (str "(" (comma-join (map to-sql (vals x))) ")")))))))
(defmethod format-clause :query-values [[_ query-values] _] (defmethod format-clause :query-values [[_ query-values] _]
(to-sql query-values)) (to-sql query-values))