Factor out set-parameters

This allows for a prepared statement to be reused for queries with different argument values.
This commit is contained in:
Sean Corfield 2019-01-10 11:32:46 -08:00
parent d25171e434
commit 85d400e28e

View file

@ -44,14 +44,22 @@
(defprotocol Transactable
(transact [this f opts]))
(defn set-parameters
""
^PreparedStatement
[^PreparedStatement ps params]
(loop [[p & more] params i 1]
(.setObject ps i p)
(if more
(recur more (inc i))
ps)))
(defn- prepare*
"Given a connection, a SQL statement, its parameters, and some options,
return a PreparedStatement representing that."
[^Connection con [sql & params] opts]
(let [^PreparedStatement s (.prepareStatement con sql)]
(doseq [p params]
(.setObject s 1 p))
s))
(doto (.prepareStatement con sql)
(set-parameters params)))
(def ^:private isolation-levels
"Transaction isolation levels."