diff --git a/README.md b/README.md index 9eb5736..1f800e2 100644 --- a/README.md +++ b/README.md @@ -188,6 +188,41 @@ Here's a big, complicated query. Note that Honey SQL makes no attempt to verify => 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 You can define your own function handlers for use in `where`: @@ -230,11 +265,10 @@ If you do implement a clause or function handler, consider submitting a pull req ## TODO -* Insert, update, delete * Create table, etc. ## License -Copyright © 2012 Justin Kramer +Copyright © 2014 Justin Kramer Distributed under the Eclipse Public License, the same as Clojure. diff --git a/test/honeysql/core_test.clj b/test/honeysql/core_test.clj index 161b52f..1c7a48e 100644 --- a/test/honeysql/core_test.clj +++ b/test/honeysql/core_test.clj @@ -55,3 +55,16 @@ "bort" "gabba" 2]))) (testing "SQL data prints and reads correctly" (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"}])))))