assertEquals(ColumnType.VARCHAR, table.getColumnByName("foo").getType());
assertEquals(ColumnType.LIST, table.getColumnByName("list").getType());
assertEquals(ColumnType.INTEGER, table.getColumnByName("id").getType());
assertEquals(ColumnType.ROWID, table.getColumnByName("_id").getType());
DataSet ds = dataContext.query().from(getCollectionName()).select("name").and("foo").and("baz").and("list")
.where("id").greaterThan(800).or("foo").isEquals("bar").execute();
assertEquals(MongoDbDataSet.class, ds.getClass());
assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
try {
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 0, bar, {count=0, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 0]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 5, bar, {count=5, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 5]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 10, bar, {count=10, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 10]]]",
ds.getRow().toString());
for (int j = 15; j < 801; j++) {
if (j % 5 == 0) {
assertTrue(ds.next());
assertEquals("Row[values=[record no. " + j + ", bar, {count=" + j
+ ", constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , " + j + "]]]", ds.getRow()
.toString());
}
}
assertTrue(ds.next());
assertTrue(ds.getRow().getValue(2) instanceof Map);
assertEquals(LinkedHashMap.class, ds.getRow().getValue(2).getClass());
assertTrue("unexpected type: " + ds.getRow().getValue(3).getClass(),
ds.getRow().getValue(3) instanceof List);
assertEquals(BasicDBList.class, ds.getRow().getValue(3).getClass());
assertEquals(
"Row[values=[record no. 801, baz, {count=801, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 801]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 802, baz, {count=802, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 802]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 803, baz, {count=803, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 803]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 804, baz, {count=804, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 804]]]",
ds.getRow().toString());
assertTrue(ds.next());
assertEquals(
"Row[values=[record no. 805, bar, {count=805, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 805]]]",
ds.getRow().toString());
for (int i = 0; i < 194; i++) {
assertTrue(ds.next());
}
assertEquals(
"Row[values=[record no. 999, baz, {count=999, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 999]]]",
ds.getRow().toString());
assertFalse(ds.next());
} finally {
ds.close();
}
ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id").in(2, 6, 8, 9)
.execute();
assertTrue(ds.next());
assertEquals("Row[values=[2, record no. 2]]", ds.getRow().toString());
assertTrue(ds.next());
assertEquals("Row[values=[6, record no. 6]]", ds.getRow().toString());
assertTrue(ds.next());
assertEquals("Row[values=[8, record no. 8]]", ds.getRow().toString());
assertTrue(ds.next());
assertEquals("Row[values=[9, record no. 9]]", ds.getRow().toString());
assertFalse(ds.next());
ds.close();
ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("foo").isEquals("bar")
.execute();
assertEquals(MongoDbDataSet.class, ds.getClass());
assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
try {
List<Object[]> objectArrays = ds.toObjectArrays();
assertEquals(200, objectArrays.size());
assertEquals("[0, record no. 0]", Arrays.toString(objectArrays.get(0)));
} finally {
ds.close();
}
// test a primary key lookup query
BasicDBObject dbRow = new BasicDBObject();
dbRow.put("_id", 123456);
dbRow.put("id", 123456);
dbRow.put("name", "record no. " + 123456);
dbRow.put("foo", "bar123456");
BasicDBObject nestedObj = new BasicDBObject();
nestedObj.put("count", 123456);
nestedObj.put("constant", "foobarbaz");
dbRow.put("baz", nestedObj);
dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", 123456));
col.insert(dbRow);
ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("_id").eq(123456).execute();
assertTrue(ds.next());
assertEquals("Row[values=[123456, record no. 123456]]", ds.getRow().toString());
assertFalse(ds.next());
// do a query that we cannot push to mongo
ds = dataContext.query().from(getCollectionName())
.select(FunctionType.SUM, dataContext.getDefaultSchema().getTables()[0].getColumnByName("id"))
.where("foo").isEquals("bar").execute();
assertEquals(InMemoryDataSet.class, ds.getClass());
ds.close();
}