Merge pull request #74
This commit is contained in:
commit
115ac81fee
3 changed files with 59 additions and 3 deletions
|
|
@ -1,5 +1,8 @@
|
||||||
## 0.6.0 In development
|
## 0.6.0 In development
|
||||||
|
|
||||||
|
* Convert seq param values to literal sql param lists (@dball)
|
||||||
|
* Apply seq to sets when converting to sql (@dball)
|
||||||
|
|
||||||
## 0.5.3
|
## 0.5.3
|
||||||
|
|
||||||
* Support exists syntax (@cddr)
|
* Support exists syntax (@cddr)
|
||||||
|
|
|
||||||
|
|
@ -248,10 +248,24 @@
|
||||||
(into [sql-str] @*params*)
|
(into [sql-str] @*params*)
|
||||||
[sql-str]))))
|
[sql-str]))))
|
||||||
|
|
||||||
(defn add-param [pname pval]
|
(defprotocol Parameterizable
|
||||||
|
(to-params [value pname]))
|
||||||
|
|
||||||
|
(extend-protocol Parameterizable
|
||||||
|
clojure.lang.Sequential
|
||||||
|
(to-params [value pname]
|
||||||
|
(paren-wrap (comma-join (mapv #(to-params % pname) value))))
|
||||||
|
clojure.lang.IPersistentSet
|
||||||
|
(to-params [value pname]
|
||||||
|
(to-params (seq value) pname))
|
||||||
|
java.lang.Object
|
||||||
|
(to-params [value pname]
|
||||||
|
(swap! *params* conj value)
|
||||||
(swap! *param-names* conj pname)
|
(swap! *param-names* conj pname)
|
||||||
(swap! *params* conj pval)
|
(*parameterizer*)))
|
||||||
(*parameterizer*))
|
|
||||||
|
(defn add-param [pname pval]
|
||||||
|
(to-params pval pname))
|
||||||
|
|
||||||
;; Anonymous param name -- :_1, :_2, etc.
|
;; Anonymous param name -- :_1, :_2, etc.
|
||||||
(defn add-anon-param [pval]
|
(defn add-anon-param [pval]
|
||||||
|
|
@ -320,6 +334,9 @@
|
||||||
(if *subquery?*
|
(if *subquery?*
|
||||||
(paren-wrap sql-str)
|
(paren-wrap sql-str)
|
||||||
sql-str)))
|
sql-str)))
|
||||||
|
clojure.lang.IPersistentSet
|
||||||
|
(-to-sql [x]
|
||||||
|
(-to-sql (seq x)))
|
||||||
nil
|
nil
|
||||||
(-to-sql [x] "NULL")
|
(-to-sql [x] "NULL")
|
||||||
SqlParam
|
SqlParam
|
||||||
|
|
|
||||||
|
|
@ -80,3 +80,39 @@
|
||||||
(columns :bar)
|
(columns :bar)
|
||||||
(values [[(honeysql.format/value {:baz "my-val"})]])
|
(values [[(honeysql.format/value {:baz "my-val"})]])
|
||||||
sql/format))))
|
sql/format))))
|
||||||
|
|
||||||
|
(deftest test-operators
|
||||||
|
(testing "in"
|
||||||
|
(doseq [[cname coll] [[:vector []] [:set #{}] [:list '()]]]
|
||||||
|
(testing (str "with values from a " (name cname))
|
||||||
|
(let [values (conj coll 1)]
|
||||||
|
(is (= ["SELECT * FROM customers WHERE (id in (1))"]
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id values]})))
|
||||||
|
(is (= ["SELECT * FROM customers WHERE (id in (?))" 1]
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id :?ids]}
|
||||||
|
{:ids values}))))))
|
||||||
|
(testing "with more than one integer"
|
||||||
|
(let [values [1 2]]
|
||||||
|
(is (= ["SELECT * FROM customers WHERE (id in (1, 2))"]
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id values]})))
|
||||||
|
(is (= ["SELECT * FROM customers WHERE (id in (?, ?))" 1 2]
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id :?ids]}
|
||||||
|
{:ids values})))))
|
||||||
|
(testing "with more than one string"
|
||||||
|
(let [values ["1" "2"]]
|
||||||
|
(is (= ["SELECT * FROM customers WHERE (id in (?, ?))" "1" "2"]
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id values]})
|
||||||
|
(sql/format {:select [:*]
|
||||||
|
:from [:customers]
|
||||||
|
:where [:in :id :?ids]}
|
||||||
|
{:ids values})))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue