From 14fd0d91895815cc65ae3b9523e09c45e37ca021 Mon Sep 17 00:00:00 2001 From: Daniel Fitzpatrick Date: Wed, 26 Oct 2022 14:43:41 -0500 Subject: [PATCH] improve `from-db-object` performance by leveraging transients --- src/clojure/monger/conversion.clj | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/clojure/monger/conversion.clj b/src/clojure/monger/conversion.clj index 729b09f..b485c5c 100644 --- a/src/clojure/monger/conversion.clj +++ b/src/clojure/monger/conversion.clj @@ -110,26 +110,25 @@ (extend-protocol ConvertFromDBObject nil - (from-db-object [input keywordize] input) + (from-db-object [_ _] nil) Object - (from-db-object [input keywordize] input) + (from-db-object [input _] input) Decimal128 - (from-db-object [^Decimal128 input keywordize] - (.bigDecimalValue input) - ) + (from-db-object [^Decimal128 input _] + (.bigDecimalValue input)) List (from-db-object [^List input keywordize] - (vec (map #(from-db-object % keywordize) input))) + (mapv #(from-db-object % keywordize) input)) BasicDBList (from-db-object [^BasicDBList input keywordize] - (vec (map #(from-db-object % keywordize) input))) + (mapv #(from-db-object % keywordize) input)) com.mongodb.DBRef - (from-db-object [^com.mongodb.DBRef input keywordize] + (from-db-object [^com.mongodb.DBRef input _] input) DBObject @@ -137,12 +136,13 @@ ;; DBObject provides .toMap, but the implementation in ;; subclass GridFSFile unhelpfully throws ;; UnsupportedOperationException. - (reduce (if keywordize - (fn [m ^String k] - (assoc m (keyword k) (from-db-object (.get input k) true))) - (fn [m ^String k] - (assoc m k (from-db-object (.get input k) false)))) - {} (.keySet input)))) + (persistent! + (reduce (if keywordize + (fn [m ^String k] + (assoc! m (keyword k) (from-db-object (.get input k) true))) + (fn [m ^String k] + (assoc! m k (from-db-object (.get input k) false)))) + (transient {}) (.keySet input))))) (defprotocol ConvertToObjectId