Inlining, part 1

We inline collection getter not so much as an optimization technique (HotSpot will inline all that anyway) but
mostly to remove let forms that do not make any difference to the (human) reader.
This commit is contained in:
Michael S. Klishin 2012-06-09 00:14:19 +04:00
parent 824a532590
commit 2a64afa6ff

View file

@ -46,14 +46,17 @@
(monger.collection/insert \"people\" { :name \"Joe\", :age 30, WriteConcern/SAFE }) (monger.collection/insert \"people\" { :name \"Joe\", :age 30, WriteConcern/SAFE })
" "
([^String collection document] ([^String collection document]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.insert ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.insert ^DBCollection coll ^DBObject (to-db-object document) ^WriteConcern monger.core/*mongodb-write-concern*))) ^DBObject (to-db-object document)
^WriteConcern monger.core/*mongodb-write-concern*))
([^String collection document ^WriteConcern concern] ([^String collection document ^WriteConcern concern]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.insert ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.insert ^DBCollection coll ^DBObject (to-db-object document) ^WriteConcern concern))) ^DBObject (to-db-object document)
concern))
([^DB db ^String collection document ^WriteConcern concern] ([^DB db ^String collection document ^WriteConcern concern]
(let [^DBCollection coll (.getCollection db collection)] (.insert ^DBCollection (.getCollection db collection)
(.insert ^DBCollection coll ^DBObject (to-db-object document) ^WriteConcern concern)))) ^DBObject (to-db-object document)
concern)))
(defn ^WriteResult insert-batch (defn ^WriteResult insert-batch
@ -67,14 +70,17 @@
" "
([^String collection ^List documents] ([^String collection ^List documents]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.insert ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.insert ^DBCollection coll ^List (to-db-object documents) ^WriteConcern monger.core/*mongodb-write-concern*))) ^List (to-db-object documents)
^WriteConcern monger.core/*mongodb-write-concern*))
([^String collection ^List documents ^WriteConcern concern] ([^String collection ^List documents ^WriteConcern concern]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.insert ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.insert ^DBCollection coll ^List (to-db-object documents) ^WriteConcern concern))) ^List (to-db-object documents)
concern))
([^DB db ^String collection ^List documents ^WriteConcern concern] ([^DB db ^String collection ^List documents ^WriteConcern concern]
(let [^DBCollection coll (.getCollection db collection)] (.insert ^DBCollection (.getCollection db collection)
(.insert ^DBCollection coll ^List (to-db-object documents) ^WriteConcern concern)))) ^List (to-db-object documents)
concern)))
;; ;;
;; monger.collection/find ;; monger.collection/find
@ -96,21 +102,20 @@
(mgcol/find \"people\" { :company \"Comp Corp\"} [:first_name :last_name]) (mgcol/find \"people\" { :company \"Comp Corp\"} [:first_name :last_name])
" "
([^String collection] ([^String collection]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.find ^DBCollection (.getCollection monger.core/*mongodb-database* collection)))
(.find coll)))
([^String collection ^Map ref] ([^String collection ^Map ref]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.find ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.find ^DBCollection coll ^DBObject (to-db-object ref)))) ^DBObject (to-db-object ref)))
([^String collection ^Map ref fields] ([^String collection ^Map ref fields]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection) (.find ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
^DBObject fields-obj (as-field-selector fields)] ^DBObject (to-db-object ref)
(.find ^DBCollection coll ^DBObject (to-db-object ref) fields-obj))) ^DBObject (as-field-selector fields)))
([^DB db ^String collection ^Map ref fields] ([^DB db ^String collection ^Map ref fields]
(let [^DBCollection coll (.getCollection db collection) (.find ^DBCollection (.getCollection db collection)
^DBObject fields-obj (as-field-selector fields)] ^DBObject (to-db-object ref)
(.find ^DBCollection coll ^DBObject (to-db-object ref) fields-obj)))) ^DBObject (as-field-selector fields))))
(defn ^ISeq find-maps (defn find-maps
"Queries for objects in this collection. "Queries for objects in this collection.
This function returns clojure Seq of Maps. This function returns clojure Seq of Maps.
If you want to work directly with DBObject, use find. If you want to work directly with DBObject, use find.
@ -124,7 +129,7 @@
([^DB db ^String collection ^Map ref fields] ([^DB db ^String collection ^Map ref fields]
(map (fn [x] (from-db-object x true)) (find db collection ref fields)))) (map (fn [x] (from-db-object x true)) (find db collection ref fields))))
(defn ^ISeq find-seq (defn find-seq
"Queries for objects in this collection, returns ISeq of DBObjects." "Queries for objects in this collection, returns ISeq of DBObjects."
([^String collection] ([^String collection]
(seq (find collection))) (seq (find collection)))
@ -152,16 +157,16 @@
" "
([^String collection ^Map ref] ([^String collection ^Map ref]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.findOne ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.findOne ^DBCollection coll ^DBObject (to-db-object ref)))) ^DBObject (to-db-object ref)))
([^String collection ^Map ref fields] ([^String collection ^Map ref fields]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection) (.findOne ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
^DBObject fields-obj (as-field-selector fields)] ^DBObject (to-db-object ref)
(.findOne ^DBCollection coll ^DBObject (to-db-object ref) fields-obj))) ^DBObject (as-field-selector fields)))
([^DB db ^String collection ^Map ref fields] ([^DB db ^String collection ^Map ref fields]
(let [^DBCollection coll (.getCollection db collection) (.findOne ^DBCollection (.getCollection db collection)
^DBObject fields-obj (as-field-selector fields)] ^DBObject (to-db-object ref)
(.findOne ^DBCollection coll ^DBObject (to-db-object ref) fields-obj)))) ^DBObject (as-field-selector fields))))
(defn ^IPersistentMap find-one-as-map (defn ^IPersistentMap find-one-as-map
"Returns a single object converted to Map from this collection matching the query." "Returns a single object converted to Map from this collection matching the query."
@ -268,14 +273,11 @@
(monger.collection/count collection { :first_name \"Paul\" })" (monger.collection/count collection { :first_name \"Paul\" })"
(^long [^String collection] (^long [^String collection]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.count ^DBCollection (.getCollection monger.core/*mongodb-database* collection)))
(.count coll)))
(^long [^String collection ^Map conditions] (^long [^String collection ^Map conditions]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.count ^DBCollection (.getCollection monger.core/*mongodb-database* collection) (to-db-object conditions)))
(.count coll (to-db-object conditions))))
(^long [^DB db ^String collection ^Map conditions] (^long [^DB db ^String collection ^Map conditions]
(let [^DBCollection coll (.getCollection db collection)] (.count ^DBCollection (.getCollection db collection) (to-db-object conditions))))
(.count coll (to-db-object conditions)))))
(defn any? (defn any?
"Wether the collection has any items at all, or items matching query. "Wether the collection has any items at all, or items matching query.
@ -344,16 +346,24 @@
([^String collection ^Map conditions ^Map document & { :keys [upsert multi write-concern] :or { upsert false ([^String collection ^Map conditions ^Map document & { :keys [upsert multi write-concern] :or { upsert false
multi false multi false
write-concern monger.core/*mongodb-write-concern* } }] write-concern monger.core/*mongodb-write-concern* } }]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.update ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.update coll (to-db-object conditions) (to-db-object document) upsert multi write-concern)))) (to-db-object conditions)
(to-db-object document)
upsert
multi
write-concern)))
(defn ^WriteResult update-by-id (defn ^WriteResult update-by-id
"Update a document with given id" "Update a document with given id"
[^String collection id ^Map document & { :keys [upsert write-concern] :or { upsert false [^String collection id ^Map document & { :keys [upsert write-concern] :or { upsert false
write-concern monger.core/*mongodb-write-concern* } }] write-concern monger.core/*mongodb-write-concern* } }]
(check-not-nil! id "id must not be nil") (check-not-nil! id "id must not be nil")
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)] (.update ^DBCollection (.getCollection monger.core/*mongodb-database* collection)
(.update coll (to-db-object { :_id id }) (to-db-object document) upsert false write-concern))) (to-db-object { :_id id })
(to-db-object document)
upsert
false
write-concern))
;; monger.collection/save ;; monger.collection/save