Merge pull request #163 from xingzhefeng/master

support java Bigdecimal in mongodb 3.4 or later
This commit is contained in:
Michael Klishin 2018-02-15 03:27:47 +03:00 committed by GitHub
commit 3196b66442
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 11 deletions

View file

@ -1,10 +1,11 @@
language: clojure language: clojure
lein: lein2 sudo: required
lein: lein
before_script: before_script:
- ./bin/ci/install_mongodb.sh - ./bin/ci/install_mongodb.sh
- mongod --version - mongod --version
- ./bin/ci/before_script.sh - ./bin/ci/before_script.sh
script: lein2 do clean, javac, test script: lein do clean, javac, test
jdk: jdk:
- openjdk7 - openjdk7
- oraclejdk7 - oraclejdk7

View file

@ -1,5 +1,5 @@
# Monger, a modern Clojure MongoDB Driver # Monger, a modern Clojure MongoDB Driver
[![Build Status](https://travis-ci.org/xingzhefeng/monger.svg?branch=master)](https://travis-ci.org/xingzhefeng/monger)
Monger is an idiomatic [Clojure MongoDB driver](http://clojuremongodb.info) for a more civilized age. Monger is an idiomatic [Clojure MongoDB driver](http://clojuremongodb.info) for a more civilized age.
It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. Monger is built from for modern Clojure versions and sits on top of the official MongoDB Java driver. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. Monger is built from for modern Clojure versions and sits on top of the official MongoDB Java driver.

View file

@ -1,7 +1,8 @@
#!/bin/sh #!/bin/sh
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 #sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org.list
sudo apt-get update sudo apt-get update
sudo apt-get install -y mongodb-org sudo apt-get install -y mongodb-org

View file

@ -5,7 +5,7 @@
:license {:name "Eclipse Public License" :license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"} :url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"] :dependencies [[org.clojure/clojure "1.8.0"]
[org.mongodb/mongodb-driver "3.4.2"] [org.mongodb/mongodb-driver "3.6.0-beta2"]
[clojurewerkz/support "1.1.0"]] [clojurewerkz/support "1.1.0"]]
:test-selectors {:default (fn [m] :test-selectors {:default (fn [m]
(and (not (:performance m)) (and (not (:performance m))

View file

@ -46,7 +46,8 @@
(:import [com.mongodb DBObject BasicDBObject BasicDBList DBCursor] (:import [com.mongodb DBObject BasicDBObject BasicDBList DBCursor]
[clojure.lang IPersistentMap Named Keyword Ratio] [clojure.lang IPersistentMap Named Keyword Ratio]
[java.util List Map Date Set] [java.util List Map Date Set]
org.bson.types.ObjectId)) org.bson.types.ObjectId
(org.bson.types Decimal128)))
(defprotocol ConvertToDBObject (defprotocol ConvertToDBObject
(^com.mongodb.DBObject to-db-object [input] "Converts given piece of Clojure data to BasicDBObject MongoDB Java driver uses")) (^com.mongodb.DBObject to-db-object [input] "Converts given piece of Clojure data to BasicDBObject MongoDB Java driver uses"))
@ -104,7 +105,6 @@
(defprotocol ConvertFromDBObject (defprotocol ConvertFromDBObject
(from-db-object [input keywordize] "Converts given DBObject instance to a piece of Clojure data")) (from-db-object [input keywordize] "Converts given DBObject instance to a piece of Clojure data"))
@ -115,6 +115,11 @@
Object Object
(from-db-object [input keywordize] input) (from-db-object [input keywordize] input)
Decimal128
(from-db-object [^Decimal128 input keywordize]
(.bigDecimalValue input)
)
List List
(from-db-object [^List input keywordize] (from-db-object [^List input keywordize]
(vec (map #(from-db-object % keywordize) input))) (vec (map #(from-db-object % keywordize) input)))
@ -140,7 +145,6 @@
{} (.keySet input)))) {} (.keySet input))))
(defprotocol ConvertToObjectId (defprotocol ConvertToObjectId
(^org.bson.types.ObjectId to-object-id [input] "Instantiates ObjectId from input unless the input itself is an ObjectId instance. In that case, returns input as is.")) (^org.bson.types.ObjectId to-object-id [input] "Instantiates ObjectId from input unless the input itself is an ObjectId instance. In that case, returns input as is."))

View file

@ -4,7 +4,8 @@
[monger.conversion :refer :all]) [monger.conversion :refer :all])
(:import [com.mongodb DBObject BasicDBObject BasicDBList] (:import [com.mongodb DBObject BasicDBObject BasicDBList]
[java.util Date Calendar List ArrayList] [java.util Date Calendar List ArrayList]
org.bson.types.ObjectId)) org.bson.types.ObjectId
(org.bson.types Decimal128)))
;; ;;
@ -101,6 +102,13 @@
(is (= 2 (from-db-object 2 false))) (is (= 2 (from-db-object 2 false)))
(is (= 2 (from-db-object 2 true)))) (is (= 2 (from-db-object 2 true))))
(deftest convert-decimal-from-dbobject
(is (= 2.3M (from-db-object (Decimal128. 2.3M) false)))
(is (= 2.3M (from-db-object (Decimal128. 2.3M) true)))
(is (= 2.3M (from-db-object (Decimal128/parse "2.3") true)))
(is (not= 2.32M (from-db-object (Decimal128/parse "2.3") true)))
)
(deftest convert-float-from-dbobject (deftest convert-float-from-dbobject
(is (= 3.3 (from-db-object 3.3 false))) (is (= 3.3 (from-db-object 3.3 false)))
(is (= 3.3 (from-db-object 3.3 true)))) (is (= 3.3 (from-db-object 3.3 true))))