Apply seq to sets when converting to sql

This allows them to be used as values, e.g. for in clauses, as
demonstrated in the test.
This commit is contained in:
Donald Ball 2015-04-20 22:49:33 -04:00
parent 53b37c1c10
commit 2820662f59
3 changed files with 14 additions and 0 deletions

View file

@ -1,5 +1,6 @@
## 0.5.3 In development
* Apply seq to sets when converting to sql (@dball)
* Support locking selects (@dball)
* Add sql array type and reader literal (@loganmhb)

View file

@ -320,6 +320,9 @@
(if *subquery?*
(paren-wrap sql-str)
sql-str)))
clojure.lang.IPersistentSet
(-to-sql [x]
(-to-sql (seq x)))
nil
(-to-sql [x] "NULL")
SqlParam

View file

@ -80,3 +80,13 @@
(columns :bar)
(values [[(honeysql.format/value {:baz "my-val"})]])
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]}))))))))