Back
for-update (clj)
(source)function
(for-update table key-map where-params opts)
Given a table name, a vector of column names to set and their values, and
either a hash map of column names and values or a vector of SQL (where clause)
and its parameters, return a vector of the full `UPDATE` SQL string and its
parameters.
Applies any `:table-fn` / `:column-fn` supplied in the options.
If `:suffix` is provided in `opts`, that string is appended to the
`UPDATE ...` statement.
Examples
next-jdbc
(ns next.jdbc.sql.builder-test
"Tests for the SQL string building functions in next.jdbc.sql.builder."
(:require [clojure.test :refer [deftest is testing]]
[next.jdbc.quoted :refer [mysql sql-server]]
[next.jdbc.sql.builder :as builder]))
(deftest test-for-update
(testing "empty example (would be a SQL error)"
(is (thrown? AssertionError ; changed in #44
(builder/for-update :user
{:status 42}
{}
{:table-fn sql-server :column-fn mysql}))))
(testing "by example"
(is (= (builder/for-update :user
{:status 42}
{:id 9}
{:table-fn sql-server :column-fn mysql})
["UPDATE [user] SET `status` = ? WHERE `id` = ?" 42 9])))
(testing "by where clause, with nil set value"
(is (= (builder/for-update :user
{:status 42, :opt nil}
["id = ?" 9]
{:table-fn sql-server :column-fn mysql})
["UPDATE [user] SET `status` = ?, `opt` = ? WHERE id = ?" 42 nil 9]))))
seancorfield/next-jdbc
(ns next.jdbc.sql.builder-test
"Tests for the SQL string building functions in next.jdbc.sql.builder."
(:require [clojure.test :refer [deftest is testing]]
[next.jdbc.quoted :refer [mysql sql-server]]
[next.jdbc.sql.builder :as builder]))
(deftest test-for-update
(testing "empty example (would be a SQL error)"
(is (thrown? AssertionError ; changed in #44
(builder/for-update :user
{:status 42}
{}
{:table-fn sql-server :column-fn mysql}))))
(testing "by example"
(is (= (builder/for-update :user
{:status 42}
{:id 9}
{:table-fn sql-server :column-fn mysql})
["UPDATE [user] SET `status` = ? WHERE `id` = ?" 42 9])))
(testing "by where clause, with nil set value"
(is (= (builder/for-update :user
{:status 42, :opt nil}
["id = ?" 9]
{:table-fn sql-server :column-fn mysql})
["UPDATE [user] SET `status` = ?, `opt` = ? WHERE id = ?" 42 nil 9]))))