Address #2 by adding rs/as-arrays
This commit is contained in:
parent
81be787316
commit
f217e86038
2 changed files with 28 additions and 2 deletions
|
|
@ -31,6 +31,10 @@
|
||||||
(.getColumnLabel rsmeta i)))
|
(.getColumnLabel rsmeta i)))
|
||||||
idxs))))
|
idxs))))
|
||||||
|
|
||||||
|
(defprotocol ColumnarResultSet
|
||||||
|
(column-names [this])
|
||||||
|
(row-values [this]))
|
||||||
|
|
||||||
(defn- mapify-result-set
|
(defn- mapify-result-set
|
||||||
"Given a result set, return an object that wraps the current row as a hash
|
"Given a result set, return an object that wraps the current row as a hash
|
||||||
map. Note that a result set is mutable and the current row will change behind
|
map. Note that a result set is mutable and the current row will change behind
|
||||||
|
|
@ -76,7 +80,27 @@
|
||||||
(seq (mapv (fn [^Integer i]
|
(seq (mapv (fn [^Integer i]
|
||||||
(clojure.lang.MapEntry. (nth @cols (dec i))
|
(clojure.lang.MapEntry. (nth @cols (dec i))
|
||||||
(.getObject rs i)))
|
(.getObject rs i)))
|
||||||
(range 1 (inc (count @cols)))))))))
|
(range 1 (inc (count @cols))))))
|
||||||
|
|
||||||
|
ColumnarResultSet
|
||||||
|
(column-names [this] @cols)
|
||||||
|
(row-values [this]
|
||||||
|
(mapv (fn [^Integer i] (.getObject rs i))
|
||||||
|
(range 1 (inc (count @cols))))))))
|
||||||
|
|
||||||
|
(defn as-arrays
|
||||||
|
"A reducing function that can be used on a result set to produce an
|
||||||
|
array-based representation, where the first element is a vector of the
|
||||||
|
column names in the result set, and subsequent elements are vectors of
|
||||||
|
the rows from the result set.
|
||||||
|
|
||||||
|
It should be used with a nil initial value:
|
||||||
|
|
||||||
|
(reduce rs/as-arrays nil (reducible! con sql-params))"
|
||||||
|
[result rs-map]
|
||||||
|
(if result
|
||||||
|
(conj result (row-values rs-map))
|
||||||
|
(conj [(column-names rs-map)] (row-values rs-map))))
|
||||||
|
|
||||||
(defn- reduce-stmt
|
(defn- reduce-stmt
|
||||||
"Execute the PreparedStatement, attempt to get either its ResultSet or
|
"Execute the PreparedStatement, attempt to get either its ResultSet or
|
||||||
|
|
|
||||||
|
|
@ -149,4 +149,6 @@
|
||||||
(execute! con ["select * from fruit where name = ?" "Pear"])
|
(execute! con ["select * from fruit where name = ?" "Pear"])
|
||||||
|
|
||||||
(delete! con :fruit {:id 1})
|
(delete! con :fruit {:id 1})
|
||||||
(update! con :fruit {:appearance "Brown"} {:name "Banana"}))
|
(update! con :fruit {:appearance "Brown"} {:name "Banana"})
|
||||||
|
|
||||||
|
(reduce rs/as-arrays nil (reducible! con ["select * from fruit"])))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue