From 19dc0e470330a673a6fb179f77aaa366a74868ff Mon Sep 17 00:00:00 2001 From: Sean Corfield Date: Fri, 19 Apr 2019 22:50:29 -0700 Subject: [PATCH] Add test based on record/custom builder --- test/next/jdbc/result_set_test.clj | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/next/jdbc/result_set_test.clj b/test/next/jdbc/result_set_test.clj index 7cbe308..a904ec1 100644 --- a/test/next/jdbc/result_set_test.clj +++ b/test/next/jdbc/result_set_test.clj @@ -142,3 +142,36 @@ nil (p/-execute (ds) ["select * from fruit"] {}))) `core-p/datafy)))) + +;; test that we can create a record-based result set builder: + +(defrecord Fruit [id name appearance cost grade]) + +(defn fruit-builder [^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)))) + +(deftest custom-map-builder + (let [row (p/-execute-one (ds) + ["select * from fruit where appearance = ?" "red"] + {:gen-fn fruit-builder})] + (is (instance? Fruit row)) + (is (= 1 (:id row)))) + (let [rs (p/-execute-all (ds) + ["select * from fruit where appearance = ?" "red"] + {:gen-fn fruit-builder})] + (is (every? #(instance? Fruit %) rs)) + (is (= 1 (count rs))) + (is (= 1 (:id (first rs))))))