Support register customized parameterizer

This commit is contained in:
Juvenn Woo 2018-03-09 11:54:14 +08:00
parent 1e76bc00ca
commit 2abe128008
No known key found for this signature in database
GPG key ID: A0E27BBC3F48491A
2 changed files with 26 additions and 1 deletions

View file

@ -56,6 +56,17 @@
:jdbc (constantly "?")
: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]
(alter-var-root
#'parameterizers
(fn [m]
(assoc m k #(f (last @*params*))))))
(def ^:dynamic *quote-identifier-fn* nil)
(def ^:dynamic *parameterizer* nil)

View file

@ -4,7 +4,8 @@
:cljs [cljs.test :refer-macros]) [deftest testing is are]]
[honeysql.types :as sql]
[honeysql.format :refer
[*allow-dashed-names?* quote-identifier format-clause format]]))
[*allow-dashed-names?* quote-identifier format-clause format
register-parameterizer]]))
(deftest test-quote
(are
@ -174,3 +175,16 @@
(is (= (format {:where [:and [:= :foo "foo"] [:= :bar "bar"] nil]}
:parameterizer :postgresql)
["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"]))))