Merge pull request #223 from crinklywrappr/from-db-object-perf

use transients to improve `from-db-object` performance
This commit is contained in:
Michael Klishin 2022-10-27 09:51:35 +04:00 committed by GitHub
commit 74a13a3489
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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.
(persistent!
(reduce (if keywordize
(fn [m ^String k]
(assoc m (keyword k) (from-db-object (.get input k) true)))
(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))))
(assoc! m k (from-db-object (.get input k) false))))
(transient {}) (.keySet input)))))
(defprotocol ConvertToObjectId