You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2015/11/27 08:18:39 UTC

metamodel git commit: METAMODEL-211: Fixed

Repository: metamodel
Updated Branches:
  refs/heads/master 4895b801c -> c156054d6


METAMODEL-211: Fixed

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/c156054d
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/c156054d
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/c156054d

Branch: refs/heads/master
Commit: c156054d62dcd02dfa567e73682aee7cdf276e52
Parents: 4895b80
Author: Mykhailo Kozik <mi...@gmail.com>
Authored: Fri Nov 27 08:18:31 2015 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Nov 27 08:18:31 2015 +0100

----------------------------------------------------------------------
 CHANGES.md                                      |  1 +
 .../metamodel/mongodb/MongoDbDataContext.java   |  6 +-
 .../mongodb/MongoDbDataContextTest.java         | 87 ++++++++++++++++++++
 3 files changed, 93 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/c156054d/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 9a8047e..bdf3696 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,7 @@
 ### Apache MetaModel (work-in-progress)
 
  * [METAMODEL-207] - Ensured the serializability of the SingleLineCsvRow class.
+ * [METAMODEL-211] - Fixed a bug related to lookup by primary key (_id) on MongoDB.
 
 ### Apache MetaModel 4.4.1
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/c156054d/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
----------------------------------------------------------------------
diff --git a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
index 73adea4..26db6d4 100644
--- a/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
+++ b/mongodb/src/main/java/org/apache/metamodel/mongodb/MongoDbDataContext.java
@@ -386,9 +386,13 @@ public class MongoDbDataContext extends QueryPostprocessDataContext implements U
 
             final Column column = item.getSelectItem().getColumn();
             final String columnName = column.getName();
-            final Object operand = item.getOperand();
             final String operatorName = getOperatorName(item);
 
+            Object operand = item.getOperand();
+            if (ObjectId.isValid(String.valueOf(operand))) {
+                operand = new ObjectId(String.valueOf(operand));
+            }
+
             final BasicDBObject existingFilterObject = (BasicDBObject) query.get(columnName);
             if (existingFilterObject == null) {
                 if (operatorName == null) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/c156054d/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
index da89bb1..c495754 100644
--- a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
+++ b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
@@ -24,6 +24,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.mongodb.WriteConcern;
 import org.apache.metamodel.DataContext;
 import org.apache.metamodel.UpdateCallback;
 import org.apache.metamodel.UpdateScript;
@@ -104,6 +105,92 @@ public class MongoDbDataContextTest extends MongoDbTestCase {
         }
     }
 
+    public void testQueriesWithAutoGeneratedID() throws Exception {
+        if (!isConfigured()) {
+            System.err.println(getInvalidConfigurationMessage());
+            return;
+        }
+
+        DBCollection col = db.createCollection(getCollectionName(), new BasicDBObject());
+
+        // delete if already exists
+        {
+            col.drop();
+            col = db.createCollection(getCollectionName(), new BasicDBObject());
+        }
+
+        // create a couple of entries
+
+        BasicDBObject dbRow1 = new BasicDBObject();
+        dbRow1.put("name", "Mr. Black");
+        dbRow1.put("category", "gen_id");
+        dbRow1.put("age", 20);
+        col.insert(dbRow1, WriteConcern.ACKNOWLEDGED);
+        final String autoGenID1 = dbRow1.get("_id").toString();
+
+        BasicDBObject dbRow2 = new BasicDBObject();
+        dbRow2.put("name", "Mr. Pink");
+        dbRow2.put("category", "gen_id");
+        dbRow2.put("age", 40);
+        col.insert(dbRow2, WriteConcern.ACKNOWLEDGED);
+        String autoGenID2 = dbRow2.get("_id").toString();
+
+        BasicDBObject dbRow3 = new BasicDBObject();
+        dbRow3.put("_id", "123");
+        dbRow3.put("name", "Mr. White");
+        dbRow3.put("category", "gen_id");
+        dbRow3.put("age", 30);
+        col.insert(dbRow3, WriteConcern.ACKNOWLEDGED);
+        String fixedID3 = dbRow3.get("_id").toString();
+
+        final MongoDbDataContext dc = new MongoDbDataContext(db);
+        DataSet ds;
+
+        // check all 3 entries inserted
+        ds = dc.query().from(getCollectionName()).selectAll()
+                .where("category").eq("gen_id").execute();
+        assertEquals(3, ds.toRows().size());
+        ds.close();
+
+        // select by autogenerated id
+        ds = dc.query().from(getCollectionName()).select("name").where("_id").eq(autoGenID1).execute();
+        assertTrue(ds.next());
+        assertEquals("Mr. Black", ds.getRow().getValue(0));
+        ds.close();
+
+        // select by multiple autogenerated ids
+        ds = dc.query().from(getCollectionName()).select("name")
+                .where("_id").eq(autoGenID1)
+                .or("_id").eq(autoGenID2)
+                .execute();
+        assertEquals(2, ds.toRows().size());
+        ds.close();
+
+        // select by both autogenerated id and fixed id
+        ds = dc.query().from(getCollectionName()).select("name")
+                .where("_id").eq(autoGenID1)
+                .or("_id").eq(fixedID3)
+                .execute();
+        assertEquals(2, ds.toRows().size());
+        ds.close();
+
+        // delete by id
+        dc.executeUpdate(new UpdateScript() {
+            @Override
+            public void run(UpdateCallback callback) {
+                callback.deleteFrom(getCollectionName())
+                        .where("_id").eq(autoGenID1)
+                        .execute();
+            }
+        });
+
+        // select by autogenerated id which was deleted
+        ds = dc.query().from(getCollectionName()).select("name").where("_id").eq(autoGenID1).execute();
+        assertEquals(0, ds.toRows().size());
+        ds.close();
+
+    }
+
     public void testFirstRowAndMaxRows() throws Exception {
         if (!isConfigured()) {
             System.err.println(getInvalidConfigurationMessage());