diff --git a/pom.xml b/pom.xml
index 931f4c7..029155b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,19 +9,24 @@
1.0
- 2.10.2
+ 2.12.0
4.11
org.specs2
- specs2_2.10
- 2.0
+ specs2-core_2.12
+ 3.8.6
test
-
+
+ org.specs2
+ specs2-junit_2.12
+ 3.8.6
+ test
+
junit
junit
@@ -32,23 +37,25 @@
org.scala-lang
scala-compiler
- 2.10.2
+ 2.12.0
org.mongodb
mongo-java-driver
- 2.10.1
+ 3.12.1
+
org.mongodb
- casbah-core_2.10
- 2.6.1
+ casbah-core_2.12
+ 3.1.1
+
${project.artifactId}
@@ -58,19 +65,22 @@
net.alchim31.maven
scala-maven-plugin
+ 4.3.1
org.apache.maven.plugins
maven-compiler-plugin
+ 3.8.1
org.apache.maven.plugins
maven-source-plugin
+ 3.2.1
org.apache.maven.plugins
maven-surefire-plugin
- 2.15
+ 2.22.2
**/*Suite.class
@@ -81,27 +91,6 @@
-
- org.scala-tools
- maven-scala-plugin
-
-
- scala-compile-first
- process-resources
-
- add-source
- compile
-
-
-
- scala-test-compile
- process-test-resources
-
- testCompile
-
-
-
-
diff --git a/src/main/scala/com/ee/dynamicmongoquery/MongoQuery.scala b/src/main/scala/com/ee/dynamicmongoquery/MongoQuery.scala
index 617582f..ad4a8d1 100644
--- a/src/main/scala/com/ee/dynamicmongoquery/MongoQuery.scala
+++ b/src/main/scala/com/ee/dynamicmongoquery/MongoQuery.scala
@@ -50,8 +50,8 @@ class MongoQuery(val queryTypes: List[Query], val collectionName: String) {
protected def executeAggregate(aggregationQuery: AggregateQuery, collection: DBCollection): Array[DBObject] = {
val aggregationPipeline = aggregationQuery.aggregationPipeline
- var aggregateOP = collection.aggregate(aggregationPipeline.head, aggregationPipeline.tail: _*)
- aggregateOP.results().toTraversable.toArray
+ var cursor = collection.aggregate(aggregationPipeline, AggregationOptions.builder().batchSize(100).allowDiskUse(true).build())
+ cursor.toArray
}
@@ -78,5 +78,11 @@ class MongoQuery(val queryTypes: List[Query], val collectionName: String) {
case _ => false
}
}
+ // Overriding toString method
+ override def toString() : String = {
+
+ return "[MongoQuery : " + this.collectionName +
+ ", Types: = " + this.queryTypes+"]";
+ }
}
diff --git a/src/main/scala/com/ee/dynamicmongoquery/PlaceholderLookup.scala b/src/main/scala/com/ee/dynamicmongoquery/PlaceholderLookup.scala
index 29b061e..a18a284 100644
--- a/src/main/scala/com/ee/dynamicmongoquery/PlaceholderLookup.scala
+++ b/src/main/scala/com/ee/dynamicmongoquery/PlaceholderLookup.scala
@@ -14,7 +14,7 @@ class PlaceholderLookup(params: Map[String, String]) {
}
case s: String => {
val resolvedValue = placeholderResolver.resolve(s)
- basicDBObject.put(key, resolvedValue)
+ basicDBObject.put(key, resolvedValue.asInstanceOf[AnyRef])
}
case _ => {
basicDBObject.put(key, value)
diff --git a/src/test/scala/com/ee/dynamicmongoquery/IntegrationTest.scala b/src/test/scala/com/ee/dynamicmongoquery/IntegrationTest.scala
index e7b7347..20d164f 100644
--- a/src/test/scala/com/ee/dynamicmongoquery/IntegrationTest.scala
+++ b/src/test/scala/com/ee/dynamicmongoquery/IntegrationTest.scala
@@ -1,21 +1,22 @@
package com.ee.dynamicmongoquery
-import com.mongodb.casbah.{MongoConnection, MongoCollection}
+import com.mongodb.casbah.{Imports, MongoClient, MongoCollection, MongoConnection}
import com.mongodb.util.JSON
-import com.mongodb.{BasicDBList, BasicDBObject}
+import com.mongodb.{BasicDBList, BasicDBObject, DBCollection}
import org.specs2.mutable.{BeforeAfter, Specification}
import org.specs2.matcher.MatchResult
+import org.specs2.specification.BeforeAfterEach
-class IntegrationTest extends Specification {
+class IntegrationTest extends Specification with BeforeAfterEach {
- lazy val mongoConn = MongoConnection()
- lazy val mongoDB = mongoConn("dynamic-query-test-db")
- lazy val userCollection: MongoCollection = mongoDB("users")
+ lazy val mongoConn = MongoClient()
+ lazy val mongoDB = mongoConn.getDB("dynamic-query-test-db")
+ lazy val userCollection: DBCollection = mongoDB.getCollection("users")
lazy val parser: MongoQueryParser = new MongoQueryParser()
+ sequential
- implicit val myContext = new BeforeAfter {
def clearCollections {
userCollection.drop()
@@ -34,7 +35,6 @@ class IntegrationTest extends Specification {
def after = {
clearCollections
}
- }
def readJsonFile(config: String): String = {
diff --git a/src/test/scala/com/ee/dynamicmongoquery/MongoQueryParserTest.scala b/src/test/scala/com/ee/dynamicmongoquery/MongoQueryParserTest.scala
index a1aafe9..f604da8 100644
--- a/src/test/scala/com/ee/dynamicmongoquery/MongoQueryParserTest.scala
+++ b/src/test/scala/com/ee/dynamicmongoquery/MongoQueryParserTest.scala
@@ -58,7 +58,7 @@ class MongoQueryParserTest extends Specification {
"find query with params and datatypes" in {
//Given
- val query: String = "db.users.find({'name':'name#String', 'rank' : 'givenRank#Integer' , 'employed':'isEmployed#Boolean', 'salary':'sal#Long','weight' :'weight#Double'})"
+ val query: String = "db.users.find({'name':'name#String', 'rank' : 'givenRank#Integer' , 'employed':'isEmployed#Boolean', 'salary':'sal#Integer','weight' :'weight#Double'})"
val params: Map[String, String] = Map("name" -> "leena", "givenRank" -> "5", "isEmployed" -> "true", "sal" -> "1000", "weight" -> "2.5")
val lookup: PlaceholderLookup = new PlaceholderLookup(params)
@@ -151,7 +151,7 @@ class MongoQueryParserTest extends Specification {
"aggregation query " in {
//Given
- val query: String = "db.users.aggregate([{'$match':{'salary' : {$gte:'from#Long',$lte:'to#Long'}}}, { $group: {_id:'$role', 'role': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 }])"
+ val query: String = "db.users.aggregate([{'$match':{'salary' : {$gte:'from#Integer',$lte:'to#Integer'}}}, { $group: {_id:'$role', 'role': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 }])"
val params: Map[String, String] = Map("from"->"1000","to" -> "2000")
val lookup: PlaceholderLookup = new PlaceholderLookup(params)
@@ -166,7 +166,7 @@ class MongoQueryParserTest extends Specification {
"aggregation query without array " in {
//Given
- val query: String = "db.users.aggregate( { '$match':{'salary' : {$gte:'from#Long',$lte:'to#Long'}}}, { $group: {_id:'$role', 'role': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 } )"
+ val query: String = "db.users.aggregate( { '$match':{'salary' : {$gte:'from#Integer',$lte:'to#Integer'}}}, { $group: {_id:'$role', 'role': {$sum: '$age' } } }, { '$sort': { 'age': -1 } }, { '$limit': 5 } )"
val params: Map[String, String] = Map("from"->"1000","to" -> "2000")
val lookup: PlaceholderLookup = new PlaceholderLookup(params)
diff --git a/src/test/scala/com/ee/dynamicmongoquery/PlaceholderLookupTest.scala b/src/test/scala/com/ee/dynamicmongoquery/PlaceholderLookupTest.scala
index e251e22..061ff10 100644
--- a/src/test/scala/com/ee/dynamicmongoquery/PlaceholderLookupTest.scala
+++ b/src/test/scala/com/ee/dynamicmongoquery/PlaceholderLookupTest.scala
@@ -13,7 +13,7 @@ class PlaceholderLookupTest extends Specification {
val lookup: PlaceholderLookup = new PlaceholderLookup(params)
val address = new BasicDBObject()
- address.put("lane", 5)
+ address.put("lane", 5:Integer)
address.put("city", "Pune")
address.put("country", "country")
address.put("zipcode", "zip#Integer")
@@ -23,10 +23,10 @@ class PlaceholderLookupTest extends Specification {
person.put("dontreplace", "dontreplace#Long")
val expectedAddress = new BasicDBObject()
- expectedAddress.put("lane", 5)
+ expectedAddress.put("lane", 5:Integer)
expectedAddress.put("city", "Pune")
expectedAddress.put("country", "India")
- expectedAddress.put("zipcode", 411037)
+ expectedAddress.put("zipcode", 411037:Integer)
val expectedPerson = new BasicDBObject()
expectedPerson.put("name", "leena")
expectedPerson.put("address", address)
diff --git a/src/test/scala/com/ee/dynamicmongoquery/QueryTest.scala b/src/test/scala/com/ee/dynamicmongoquery/QueryTest.scala
index ffe36c8..e8416fd 100644
--- a/src/test/scala/com/ee/dynamicmongoquery/QueryTest.scala
+++ b/src/test/scala/com/ee/dynamicmongoquery/QueryTest.scala
@@ -2,10 +2,14 @@ package com.ee.dynamicmongoquery
import org.specs2.mutable.Specification
import com.mongodb.BasicDBObject
+
import collection.JavaConversions._
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
+import scala.collection.immutable.SortedMap
+import scala.collection.mutable
+
@RunWith(classOf[JUnitRunner])
class QueryTest extends Specification {
"Find Queries" should {
@@ -62,22 +66,7 @@ class QueryTest extends Specification {
val findQuery = FindQuery(query, lookup)
//Then
- val criteriaMap = Map("name" -> "leena", "rank" -> 5, "employed" -> true, "salary" -> 1000, "weight" -> 2.5)
- findQuery.criteria === new BasicDBObject(criteriaMap)
- findQuery.projection === new BasicDBObject()
- }
-
- "find query with params and datatypes" in {
- //Given
- val query: String = "{'name':'name#String', 'rank' : 'givenRank#Integer' , 'employed':'isEmployed#Boolean', 'salary':'sal#Long','weight' :'weight#Double'}"
- val params: Map[String, String] = Map("name" -> "leena", "givenRank" -> "5", "isEmployed" -> "true", "sal" -> "1000", "weight" -> "2.5")
- val lookup: PlaceholderLookup = new PlaceholderLookup(params)
-
- //When
- val findQuery = FindQuery(query, lookup)
-
- //Then
- val criteriaMap = Map("name" -> "leena", "rank" -> 5, "employed" -> true, "salary" -> 1000, "weight" -> 2.5)
+ val criteriaMap = mutable.LinkedHashMap("name" -> "leena", "rank" -> 5, "employed" -> true, "salary" -> 1000l, "weight" -> 2.5)
findQuery.criteria === new BasicDBObject(criteriaMap)
findQuery.projection === new BasicDBObject()
}