From 5d31f9fc1a4a6bce4b8a610d06dc71593c52e3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 11:31:45 +0800 Subject: [PATCH 1/6] support java Bigdecimal in mongodb 3.4 or later --- project.clj | 2 +- src/clojure/monger/conversion.clj | 10 +++++++--- test/monger/test/conversion_test.clj | 10 +++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/project.clj b/project.clj index f24d283..4c92739 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :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"]] :test-selectors {:default (fn [m] (and (not (:performance m)) diff --git a/src/clojure/monger/conversion.clj b/src/clojure/monger/conversion.clj index 8ed2c5f..02e97a5 100644 --- a/src/clojure/monger/conversion.clj +++ b/src/clojure/monger/conversion.clj @@ -46,7 +46,8 @@ (:import [com.mongodb DBObject BasicDBObject BasicDBList DBCursor] [clojure.lang IPersistentMap Named Keyword Ratio] [java.util List Map Date Set] - org.bson.types.ObjectId)) + org.bson.types.ObjectId + (org.bson.types Decimal128))) (defprotocol ConvertToDBObject (^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 (from-db-object [input keywordize] "Converts given DBObject instance to a piece of Clojure data")) @@ -115,6 +115,11 @@ Object (from-db-object [input keywordize] input) + Decimal128 + (from-db-object [^Decimal128 input keywordize] + (.bigDecimalValue input) + ) + List (from-db-object [^List input keywordize] (vec (map #(from-db-object % keywordize) input))) @@ -140,7 +145,6 @@ {} (.keySet input)))) - (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.")) diff --git a/test/monger/test/conversion_test.clj b/test/monger/test/conversion_test.clj index c989574..7e3e49a 100644 --- a/test/monger/test/conversion_test.clj +++ b/test/monger/test/conversion_test.clj @@ -4,7 +4,8 @@ [monger.conversion :refer :all]) (:import [com.mongodb DBObject BasicDBObject BasicDBList] [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 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 (is (= 3.3 (from-db-object 3.3 false))) (is (= 3.3 (from-db-object 3.3 true)))) From 993bb038d9bfa70587f75d63b86f17c0a19d42ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:14:55 +0800 Subject: [PATCH 2/6] ci test tip No command 'lein2' found, did you mean: test mongodb version up to 3.5 --- .travis.yml | 6 +++--- bin/ci/install_mongodb.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 58485c3..18cdc32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,10 @@ language: clojure -lein: lein2 +lein: lein before_script: - - ./bin/ci/install_mongodb.sh + - ./bin/ci/install_mongodb.sh - mongod --version - ./bin/ci/before_script.sh -script: lein2 do clean, javac, test +script: lein do clean, javac, test jdk: - openjdk7 - oraclejdk7 diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index 74c671b..a72da2d 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,7 +1,7 @@ #!/bin/sh 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 +echo "deb http://repo.mongodb.org/apt/debian/dists/wheezy/mongodb-org/3.5/ main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-get update sudo apt-get install -y mongodb-org From 79387a694ac2a1d7b02ae137cdc65951d1233efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:36:43 +0800 Subject: [PATCH 3/6] This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid, and setgid executables. If you require sudo, add 'sudo: required' to your .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 18cdc32..b830e7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: clojure +sudo: required lein: lein before_script: - ./bin/ci/install_mongodb.sh From 15831490d9a941b3cfe3fc3042982aae2b8b8013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:43:22 +0800 Subject: [PATCH 4/6] mongodb 3.4 repo url repair --- bin/ci/install_mongodb.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index a72da2d..51b2312 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,7 +1,7 @@ #!/bin/sh sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 -echo "deb http://repo.mongodb.org/apt/debian/dists/wheezy/mongodb-org/3.5/ main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list +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 install -y mongodb-org From c35545a97ab8aad4006c6a2072adee3ee1ce96f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:46:53 +0800 Subject: [PATCH 5/6] update sudo apt-key adv --- bin/ci/install_mongodb.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index 51b2312..6645e06 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,6 +1,7 @@ #!/bin/sh -sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 +#sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 +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 From 20b4d5d93ba2de7e7b8f4aeaac36e0d12cf02aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:53:18 +0800 Subject: [PATCH 6/6] add travis-ci.org build image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a8ac8a..8f906dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 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. 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.