Skip to content

Commit d634f7d

Browse files
committed
added batch insert support
1 parent b6de247 commit d634f7d

2 files changed

Lines changed: 32 additions & 20 deletions

File tree

project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
:url "https://github.com/krisajenkins/yesql"}
1212
:profiles {:dev {:dependencies [[expectations "2.1.3" :exclusions [org.clojure/clojure]]
1313
[org.apache.derby/derby "10.12.1.1"]]
14-
:plugins [[lein-autoexpect "1.4.0"]
14+
:plugins [[lein-autoexpect "1.4.0" :exclusions [org.clojure/tools.namespace]]
1515
[lein-expectations "0.0.8" :exclusions [org.clojure/clojure]]]}
1616
:1.5 {:dependencies [[org.clojure/clojure "1.5.1"]]}
1717
:1.6 {:dependencies [[org.clojure/clojure "1.6.0"]]}

src/yesql/generate.clj

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
(defn rewrite-query-for-jdbc
3737
[tokens initial-args]
3838
(let [{:keys [expected-keys expected-positional-count]} (analyse-statement-tokens tokens)
39-
actual-keys (set (keys (dissoc initial-args :?)))
39+
actual-keys (set (keys (dissoc (if (or (vector? initial-args) (list? initial-args)) (apply merge initial-args) initial-args) :?)))
4040
actual-positional-count (count (:? initial-args))
4141
missing-keys (set/difference expected-keys actual-keys)]
4242
(if-not (empty? missing-keys)
@@ -50,23 +50,33 @@
5050
"Expected %d positional parameters. Got %d."
5151
"Supply positional parameters as {:? [...]}"])
5252
expected-positional-count actual-positional-count))))
53-
(let [[final-query final-parameters consumed-args]
54-
(reduce (fn [[query parameters args] token]
55-
(cond
56-
(string? token) [(str query token)
57-
parameters
58-
args]
59-
(symbol? token) (let [[arg new-args] (if (= '? token)
60-
[(first (:? args)) (update-in args [:?] rest)]
61-
[(get args (keyword token)) args])]
62-
[(str query (args-to-placeholders arg))
63-
(vec (if (in-list-parameter? arg)
64-
(concat parameters arg)
65-
(conj parameters arg)))
66-
new-args])))
67-
["" [] initial-args]
68-
tokens)]
69-
(concat [final-query] final-parameters))))
53+
(if (or (vector? initial-args) (list? initial-args))
54+
(let [[final-query final-parameters consumed-args]
55+
(reduce (fn [[query parameters args] token]
56+
(cond
57+
(string? token) [(str query token)
58+
parameters
59+
args]
60+
(symbol? token) [(str query (args-to-placeholders ""))
61+
(conj parameters (keyword token))
62+
args])) ["" [] initial-args] tokens)] (concat [final-query] (mapv (apply juxt final-parameters) initial-args)))
63+
(let [[final-query final-parameters consumed-args]
64+
(reduce (fn [[query parameters args] token]
65+
(cond
66+
(string? token) [(str query token)
67+
parameters
68+
args]
69+
(symbol? token) (let [[arg new-args] (if (= '? token)
70+
[(first (:? args)) (update-in args [:?] rest)]
71+
[(get args (keyword token)) args])]
72+
[(str query (args-to-placeholders arg))
73+
(vec (if (in-list-parameter? arg)
74+
(concat parameters arg)
75+
(conj parameters arg)))
76+
new-args])))
77+
["" [] initial-args]
78+
tokens)]
79+
(concat [final-query] final-parameters)))))
7080

7181
;; Maintainer's note: clojure.java.jdbc.execute! returns a list of
7282
;; rowcounts, because it takes a list of parameter groups. In our
@@ -78,7 +88,9 @@
7888

7989
(defn insert-handler
8090
[db statement-and-params call-options]
81-
(jdbc/db-do-prepared-return-keys db statement-and-params))
91+
(if (vector? (second statement-and-params))
92+
(apply jdbc/db-do-prepared db statement-and-params)
93+
(jdbc/db-do-prepared-return-keys db statement-and-params)))
8294

8395
(defn query-handler
8496
[db sql-and-params

0 commit comments

Comments
 (0)