Skip to content

Commit

Permalink
update scala to 2.11.1 and Java mongo driver to 2.12.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Tommy Chheng committed Jun 6, 2014
1 parent 99caa78 commit b83eac7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 33 deletions.
5 changes: 2 additions & 3 deletions src/r-mongo-scala/pom.xml
Expand Up @@ -8,7 +8,7 @@
<name>r-mongo-scala</name>

<properties>
<scala.version>2.10.2</scala.version>
<scala.version>2.11.1</scala.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Expand Down Expand Up @@ -50,9 +50,8 @@
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.2</version>
<version>2.12.2</version>
</dependency>

</dependencies>

<build>
Expand Down
29 changes: 10 additions & 19 deletions src/r-mongo-scala/src/main/scala/rmongo/RMongo.scala
Expand Up @@ -10,19 +10,10 @@ import java.util.Arrays
import java.util.logging.Logger
import java.util.logging.Level

/**
*
* User: @tommychheng
* Date: Sep 23, 2010
* Time: 9:36:10 PM
*
*
*/

class RMongo(dbName: String, hosts: String, replica: Boolean) {
val mongoLogger = Logger.getLogger("com.mongodb")
mongoLogger.setLevel(Level.SEVERE)
val servers = hosts.split(",").map(_.trim.split(":")).map { a =>
val servers = hosts.split(",").map(_.trim.split(":")).map { a =>
if (a.size < 2) new ServerAddress(a(0), 27017) else new ServerAddress(a(0), a(1).toInt)
}.toList
val this.replica = replica
Expand All @@ -37,7 +28,7 @@ class RMongo(dbName: String, hosts: String, replica: Boolean) {
def dbAuthenticate(username:String, password:String):Boolean = {
db.authenticate(username, password.toCharArray)
}

def dbSetWriteConcern(w: Int, wtimeout: Int, fsync: Boolean, j: Boolean) {
writeConcern = new WriteConcern(w, wtimeout, fsync, j)
}
Expand Down Expand Up @@ -106,7 +97,7 @@ class RMongo(dbName: String, hosts: String, replica: Boolean) {
def dbGetDistinct(collectionName: String, key: String): String = {
dbGetDistinct(collectionName, key, "")
}

def dbGetDistinct(collectionName: String, key: String, query: String): String = {
val dbCollection = db.getCollection(collectionName)

Expand All @@ -131,7 +122,7 @@ class RMongo(dbName: String, hosts: String, replica: Boolean) {
queryArray(i) = JSON.parse(query).asInstanceOf[DBObject]
}
var aggregateIterator = dbCollection.aggregate(queryArray(0), Arrays.copyOfRange(queryArray, 1, queryArray.length):_*).results.iterator

val results = ListBuffer[String]()
while (aggregateIterator.hasNext) {
val item = aggregateIterator.next
Expand Down Expand Up @@ -165,17 +156,17 @@ object RMongo{
}

def toCsvOutput(cursor: DBCursor): String = {

if(cursor.hasNext == false) return ""

val results = ListBuffer[String]()

if (cursor.getKeysWanted != null && cursor.getKeysWanted.keySet.size != 0) {
/* If fields were specified (save time) */
val keysWanted = cursor.getKeysWanted
keysWanted.put("_id", 1)
val keys = keysWanted.keySet.toArray(new Array[String](keysWanted.keySet.size))
results.append(keys.mkString(SEPARATOR))
results.append(keys.mkString(SEPARATOR))
while (cursor.hasNext) {
results.append(csvRowFromDBObject(keys, cursor.next))
}
Expand All @@ -187,7 +178,7 @@ object RMongo{
keysWanted.addAll(ccursor.next.keySet)
}
val keys = keysWanted.toArray(new Array[String](keysWanted.size))
results.append(keys.mkString(SEPARATOR))
results.append(keys.mkString(SEPARATOR))
while (cursor.hasNext) {
results.append(csvRowFromDBObject(keys, cursor.next))
}
Expand All @@ -196,7 +187,7 @@ object RMongo{
results.mkString("\n")
}

def csvRowFromDBObject(keys:Array[String], item:DBObject):String ={
def csvRowFromDBObject(keys:Array[String], item:DBObject):String = {

keys.map{k =>
val value = item.get(k)
Expand Down
31 changes: 20 additions & 11 deletions src/r-mongo-scala/src/test/scala/rmongo/MongoTest.scala
Expand Up @@ -40,11 +40,11 @@ class MongoTest{

assert(rMongo.dbShowCollections().contains(collectionName))
}

@Test
def testDbReplicaSetInsertDocument{
clearTestDB

val rMongo = new RMongo("test", "localhost", true)
val doc = """ {"_id": "foo", "foo": "bar", "size": 5} """

Expand All @@ -53,7 +53,8 @@ class MongoTest{

val duplicateResponse = rMongo.dbInsertDocument("test_data", doc)

Assert.assertEquals("E11000 duplicate key error index: test.test_data.$_id_ dup key: { : \"foo\" }", duplicateResponse)
var expectedError = "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test_data.$_id_ dup key: { : \"foo\" }"
Assert.assertEquals(expectedError, duplicateResponse)
}

@Test
Expand All @@ -68,7 +69,8 @@ class MongoTest{

val duplicateResponse = rMongo.dbInsertDocument("test_data", doc)

Assert.assertEquals("E11000 duplicate key error index: test.test_data.$_id_ dup key: { : \"foo\" }", duplicateResponse)
var expectedError = "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.test_data.$_id_ dup key: { : \"foo\" }"
Assert.assertEquals(expectedError, duplicateResponse)
}

@Test
Expand Down Expand Up @@ -162,14 +164,21 @@ class MongoTest{

@Test
def testToCsvOutput{
val m = new Mongo()
val db = m.getDB("test")
val collection = db.getCollection("test_data")
clearTestDB

val rMongo = new RMongo("test")

val doc = """ {"_id": "foo", "foo": "bar\n\r should not break", "size": 5} """
val response = rMongo.dbInsertDocument("test_data", doc)

val query = "{}"
val queryObject = JSON.parse(query).asInstanceOf[DBObject]
val collection = db.getCollection("test_data")
val cursor = collection.find(queryObject)

val results = RMongo.toCsvOutput(cursor)

assert(results != null)
}

def parsedFirstRecordFrom(results: String):Map[String, Any] = {
Expand All @@ -181,24 +190,24 @@ class MongoTest{

keys.zip(entry).toMap
}

@Test
def testDbGetDistinct{
val rMongo = new RMongo("test")
val results = rMongo.dbGetDistinct("test_data", "size")

Assert.assertEquals("\"5\"\n\"10\"", results)
}

@Test
def testDbAggregate{
val rMongo = new RMongo("test")
var pipeline = Array(
var pipeline = Array(
""" { "$project" : { "baz" : "$foo" } } """,
""" { "$group" : { "_id" : "$baz" } } """,
""" { "$match" : { "_id" : "bar" } } """)
val results = rMongo.dbAggregate("test_data", pipeline)

//Assert.assertEquals("\"{ \"_id\" : \"bar\"}\"", results)
assert(results.contains("{ \"_id\" : \"bar\"}"))
}
Expand Down

0 comments on commit b83eac7

Please sign in to comment.