Merge pull request #209 from juvenn/customized-parameterizer
Support register customized parameterizer
This commit is contained in:
commit
3fe5f0f51d
2 changed files with 30 additions and 4 deletions
|
|
@ -52,9 +52,21 @@
|
||||||
:oracle #(str \" (string/replace % "\"" "\"\"") \")})
|
:oracle #(str \" (string/replace % "\"" "\"\"") \")})
|
||||||
|
|
||||||
(def ^:private parameterizers
|
(def ^:private parameterizers
|
||||||
{:postgresql #(str "$" (swap! *all-param-counter* inc))
|
(atom
|
||||||
|
{:postgresql #(str "$" (swap! *all-param-counter* inc))
|
||||||
:jdbc (constantly "?")
|
:jdbc (constantly "?")
|
||||||
:none #(str (last @*params*))})
|
:none #(str (last @*params*))}))
|
||||||
|
|
||||||
|
(defn register-parameterizer
|
||||||
|
"Register f as a customized parameterizer.
|
||||||
|
E.g.:
|
||||||
|
(register-parameterizer :single-quote #(str \"'\" % \"'\"))
|
||||||
|
(format sql-map :parameterizer :single-quote)"
|
||||||
|
[k f]
|
||||||
|
(swap!
|
||||||
|
parameterizers
|
||||||
|
(fn [m]
|
||||||
|
(assoc m k #(f (last @*params*))))))
|
||||||
|
|
||||||
(def ^:dynamic *quote-identifier-fn* nil)
|
(def ^:dynamic *quote-identifier-fn* nil)
|
||||||
(def ^:dynamic *parameterizer* nil)
|
(def ^:dynamic *parameterizer* nil)
|
||||||
|
|
@ -254,7 +266,7 @@
|
||||||
*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))
|
||||||
*allow-dashed-names?* (:allow-dashed-names? opts)]
|
*allow-dashed-names?* (:allow-dashed-names? opts)]
|
||||||
(let [sql-str (to-sql sql-map)]
|
(let [sql-str (to-sql sql-map)]
|
||||||
(if (and (seq @*params*) (not= :none (:parameterizer opts)))
|
(if (and (seq @*params*) (not= :none (:parameterizer opts)))
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
:cljs [cljs.test :refer-macros]) [deftest testing is are]]
|
:cljs [cljs.test :refer-macros]) [deftest testing is are]]
|
||||||
[honeysql.types :as sql]
|
[honeysql.types :as sql]
|
||||||
[honeysql.format :refer
|
[honeysql.format :refer
|
||||||
[*allow-dashed-names?* quote-identifier format-clause format]]))
|
[*allow-dashed-names?* quote-identifier format-clause format
|
||||||
|
register-parameterizer]]))
|
||||||
|
|
||||||
(deftest test-quote
|
(deftest test-quote
|
||||||
(are
|
(are
|
||||||
|
|
@ -174,3 +175,16 @@
|
||||||
(is (= (format {:where [:and [:= :foo "foo"] [:= :bar "bar"] nil]}
|
(is (= (format {:where [:and [:= :foo "foo"] [:= :bar "bar"] nil]}
|
||||||
:parameterizer :postgresql)
|
:parameterizer :postgresql)
|
||||||
["WHERE (foo = $1 AND bar = $2)" "foo" "bar"]))))
|
["WHERE (foo = $1 AND bar = $2)" "foo" "bar"]))))
|
||||||
|
|
||||||
|
(register-parameterizer :single-quote #(str \' % \'))
|
||||||
|
(register-parameterizer :mysql-fill (constantly "?"))
|
||||||
|
|
||||||
|
(deftest customized-parameterizer
|
||||||
|
(testing "should fill param with single quote"
|
||||||
|
(is (= (format {:where [:and [:= :foo "foo"] [:= :bar "bar"] nil]}
|
||||||
|
:parameterizer :single-quote)
|
||||||
|
["WHERE (foo = 'foo' AND bar = 'bar')" "foo" "bar"])))
|
||||||
|
(testing "should fill param with ?"
|
||||||
|
(is (= (format {:where [:and [:= :foo "foo"] [:= :bar "bar"] nil]}
|
||||||
|
:parameterizer :mysql-fill)
|
||||||
|
["WHERE (foo = ? AND bar = ?)" "foo" "bar"]))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue