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());