-
Notifications
You must be signed in to change notification settings - Fork 0
/
jdbc.clj
52 lines (45 loc) · 1.7 KB
/
jdbc.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
(ns active.jdbc
(:require [next.jdbc :as next]
[active.jdbc.query :as q])
(:import [java.sql Statement]
[clojure.lang IReduceInit]))
(defn prepare
(^Statement [connection sql-params]
(prepare connection sql-params nil))
(^Statement [connection sql-params opts]
(next/prepare connection (q/resolve sql-params connection) opts)))
(defn- wrap [f connectable sql-params opts]
(next/on-connection [connection connectable]
(with-open [stmt (prepare connection sql-params opts)]
(f stmt [] opts))))
(defn execute!
([connectable sql-params]
(execute! connectable sql-params nil))
([connectable sql-params opts]
(wrap next/execute! connectable sql-params opts)))
(defn execute-batch!
([connectable sql param-groups]
(execute-batch! connectable sql param-groups nil))
([connectable sql param-groups opts]
;; Note: the sql should probably have no parameters set yet; not sure if next could handle that.
(next/on-connection [connection connectable]
(with-open [stmt (prepare connection sql opts)]
(next/execute-batch! stmt param-groups opts)))))
(defn execute-one!
([connectable sql-params]
(execute-one! connectable sql-params nil))
([connectable sql-params opts]
(wrap next/execute-one! connectable sql-params opts)))
(defn- delayed-reduction [g]
(reify IReduceInit
(reduce [this f init]
(g (fn [coll]
(reduce f init coll))))))
(defn plan
([connectable sql-params]
(plan connectable sql-params nil))
([connectable sql-params opts]
(delayed-reduction
(fn [red]
(wrap (comp red next/plan)
connectable sql-params opts)))))