Add example row builder for record

Note: this makes a lot of assumptions about the shape of the result 
set's rows!
This commit is contained in:
Sean Corfield 2019-04-18 00:28:55 -07:00
parent 50fbc5f8f1
commit b82f349717

View file

@ -139,4 +139,32 @@
(query con ["select * from fruit where name = ?" "Pear"])
(delete! con :fruit {:id 1})
(update! con :fruit {:appearance "Brown"} {:name "Banana"}))
(update! con :fruit {:appearance "Brown"} {:name "Banana"})
(defrecord Fruit [id name appearance cost grade])
(defn fruit-builder [^java.sql.ResultSet rs opts]
(reify
rs/RowBuilder
(->row [_] (->Fruit (.getObject rs "id")
(.getObject rs "name")
(.getObject rs "appearance")
(.getObject rs "cost")
(.getObject rs "grade")))
(with-column [_ row i] row)
(column-count [_] 0) ; no need to iterate over columns
(row! [_ row] row)
rs/ResultSetBuilder
(->rs [_] (transient []))
(with-row [_ rs row] (conj! rs row))
(rs! [_ rs] (persistent! rs))))
(quick-bench ; 2.2 micros
(execute-one! con ["select * from fruit where appearance = ?" "red"]
{:gen-fn fruit-builder}))
(quick-bench ; 2.47 micros
(execute! con ["select * from fruit where appearance = ?" "red"]
{:gen-fn fruit-builder}))
(quick-bench ; 3 micros
(execute! con ["select * from fruit"]
{:gen-fn fruit-builder})))