This commit is contained in:
Dave Della Costa 2014-10-22 20:41:33 +00:00
commit 6e3dc62993
2 changed files with 49 additions and 1 deletions

View file

@ -262,6 +262,41 @@ Here's a big, complicated query. Note that Honey SQL makes no attempt to verify
=> true => true
``` ```
### Insert, Update, Delete
Since version 0.4.3 HoneySQL supports insert, update, and delete.
```clj
;; Insert
(-> (insert-into :foo)
(values [{:foo "foo"
:bar "bar"}])
sql/format)
=> ["INSERT INTO foo (foo, bar) VALUES (?, ?)" "foo" "bar"]
;; Alternatively, you can enter multiple rows at a time:
(-> (insert-into :foo)
(columns :foo :bar)
(values [["foo1" "bar1"] ["foo2" "bar2"]])
sql/format)
=> ["INSERT INTO foo (foo, bar) VALUES (?, ?), (?, ?)" "foo1" "bar1" "foo2" "bar2"]
(-> (update :foo)
(sset {:foo "foo"}) ;; (not a typo!)
(where [:= :id 1])
sql/format)
=> ["UPDATE foo SET foo = ? WHERE id = 1" "foo"]
(-> (delete-from :foo)
(where [:= :id 1])
sql/format)
=> ["DELETE FROM foo WHERE id = 1"]
```
## Extensibility ## Extensibility
You can define your own function handlers for use in `where`: You can define your own function handlers for use in `where`:
@ -308,6 +343,6 @@ If you do implement a clause or function handler, consider submitting a pull req
## License ## License
Copyright © 2012 Justin Kramer Copyright © 2014 Justin Kramer
Distributed under the Eclipse Public License, the same as Clojure. Distributed under the Eclipse Public License, the same as Clojure.

View file

@ -55,3 +55,16 @@
"bort" "gabba" 2]))) "bort" "gabba" 2])))
(testing "SQL data prints and reads correctly" (testing "SQL data prints and reads correctly"
(is (= m1 (read-string (pr-str m1))))))) (is (= m1 (read-string (pr-str m1)))))))
(deftest can-format-values-properly
(is (= ["VALUES (?, ?), (?, ?)" "foo1" "bar1" "foo2" "bar2"]
(sql/format (values [["foo1" "bar1"] ["foo2" "bar2"]]))))
(is (= ["(foo, bar) VALUES (1, ?)" "bar"]
(sql/format (values [{:foo 1 :bar "bar"}]))))
(is (= ["(foo, bar) VALUES (?, ?)" "foo" "bar"]
(sql/format (values [{:foo "foo" :bar "bar"}]))))
(is (= ["(foo, bar) VALUES (?, ?), (?, ?)" "foo1" "bar1" "foo2" "bar2"]
(sql/format (values [{:foo "foo1" :bar "bar1"} {:foo "foo2" :bar "bar2"}])))))