From b82f349717f2110bf96759d70999e0f969a4cf2f Mon Sep 17 00:00:00 2001 From: Sean Corfield Date: Thu, 18 Apr 2019 00:28:55 -0700 Subject: [PATCH] Add example row builder for record Note: this makes a lot of assumptions about the shape of the result set's rows! --- test/next/jdbc_test.clj | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/test/next/jdbc_test.clj b/test/next/jdbc_test.clj index 7c6b4c5..f3edf58 100644 --- a/test/next/jdbc_test.clj +++ b/test/next/jdbc_test.clj @@ -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})))