http://git-wip-us.apache.org/repos/asf/metamodel/blob/365fae3a/mongodb/src/main/java/org/apache/metamodel/mongodb/package-info.java ---------------------------------------------------------------------- diff --git a/mongodb/src/main/java/org/apache/metamodel/mongodb/package-info.java b/mongodb/src/main/java/org/apache/metamodel/mongodb/package-info.java deleted file mode 100644 index 99bf0fc..0000000 --- a/mongodb/src/main/java/org/apache/metamodel/mongodb/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/** - * Module package for MongoDB support - */ -package org.apache.metamodel.mongodb; -
http://git-wip-us.apache.org/repos/asf/metamodel/blob/365fae3a/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 deleted file mode 100644 index c495754..0000000 --- a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java +++ /dev/null @@ -1,636 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.metamodel.mongodb; - -import java.util.Arrays; -import java.util.HashMap; -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; -import org.apache.metamodel.data.DataSet; -import org.apache.metamodel.data.InMemoryDataSet; -import org.apache.metamodel.query.FunctionType; -import org.apache.metamodel.query.SelectItem; -import org.apache.metamodel.schema.ColumnType; -import org.apache.metamodel.schema.Schema; -import org.apache.metamodel.schema.Table; -import org.apache.metamodel.util.SimpleTableDef; - -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.Mongo; - -public class MongoDbDataContextTest extends MongoDbTestCase { - - private DB db; - - @Override - protected void setUp() throws Exception { - super.setUp(); - if (isConfigured()) { - Mongo mongo = new Mongo(getHostname()); - db = mongo.getDB(getDatabaseName()); - } - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - if (isConfigured()) { - db.dropDatabase(); - } - } - - public void testNestedObjectFetching() 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()); - } - - final BasicDBList list = new BasicDBList(); - list.add(new BasicDBObject().append("city", "Copenhagen").append("country", "Denmark")); - list.add(new BasicDBObject().append("city", "Stockholm").append("country", "Sweden")); - - final BasicDBObject dbRow = new BasicDBObject(); - dbRow.append("name", new BasicDBObject().append("first", "John").append("last", "Doe")); - dbRow.append("gender", "MALE"); - dbRow.append("addresses", list); - col.insert(dbRow); - - final MongoDbDataContext dc = new MongoDbDataContext(db, new SimpleTableDef(getCollectionName(), new String[] { - "name.first", "name.last", "gender", "addresses", "addresses[0].city", "addresses[0].country", - "addresses[5].foobar" })); - - final DataSet ds = dc.query().from(getCollectionName()).selectAll().execute(); - try { - assertTrue(ds.next()); - final Object addresses = ds.getRow().getValue(3); - assertEquals("Row[values=[John, Doe, MALE, " + addresses + ", Copenhagen, Denmark, null]]", ds.getRow() - .toString()); - assertTrue(addresses instanceof List); - assertFalse(ds.next()); - } finally { - ds.close(); - } - } - - 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()); - return; - } - - DBCollection col = db.createCollection(getCollectionName(), new BasicDBObject()); - - // delete if already exists - { - col.drop(); - col = db.createCollection(getCollectionName(), new BasicDBObject()); - } - - // create 3 records - for (int i = 0; i < 3; i++) { - BasicDBObject dbRow = new BasicDBObject(); - dbRow.put("id", i + 1); - col.insert(dbRow); - } - - final MongoDbDataContext dc = new MongoDbDataContext(db); - - DataSet ds; - - ds = dc.query().from(getCollectionName()).select("id").firstRow(2).execute(); - assertTrue(ds instanceof MongoDbDataSet); - assertTrue(ds.next()); - assertEquals("Row[values=[2]]", ds.getRow().toString()); - assertTrue(ds.next()); - assertEquals("Row[values=[3]]", ds.getRow().toString()); - assertFalse(ds.next()); - ds.close(); - - ds = dc.query().from(getCollectionName()).select("id").maxRows(1).execute(); - assertTrue(ds instanceof MongoDbDataSet); - assertTrue(ds.next()); - assertEquals("Row[values=[1]]", ds.getRow().toString()); - assertFalse(ds.next()); - ds.close(); - - ds = dc.query().from(getCollectionName()).select("id").maxRows(1).firstRow(2).execute(); - assertTrue(ds instanceof MongoDbDataSet); - assertTrue(ds.next()); - assertEquals("Row[values=[2]]", ds.getRow().toString()); - assertFalse(ds.next()); - ds.close(); - } - - public void testRead() throws Exception { - // Adding a comment to commit something and invoke a build in Travis... - 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 1000 records - for (int i = 0; i < 1000; i++) { - BasicDBObject dbRow = new BasicDBObject(); - dbRow.put("id", i); - dbRow.put("name", "record no. " + i); - if (i % 5 == 0) { - dbRow.put("foo", "bar"); - } else { - dbRow.put("foo", "baz"); - } - BasicDBObject nestedObj = new BasicDBObject(); - nestedObj.put("count", i); - nestedObj.put("constant", "foobarbaz"); - dbRow.put("baz", nestedObj); - - dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", i)); - - col.insert(dbRow); - } - - // Instantiate the actual data context - final DataContext dataContext = new MongoDbDataContext(db); - - assertEquals("[" + getCollectionName() + ", system.indexes]", - Arrays.toString(dataContext.getDefaultSchema().getTableNames())); - Table table = dataContext.getDefaultSchema().getTableByName(getCollectionName()); - assertEquals("[_id, baz, foo, id, list, name]", Arrays.toString(table.getColumnNames())); - - assertEquals(ColumnType.MAP, table.getColumnByName("baz").getType()); - 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 GREATER_THAN_OR_EQUAL - ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id") - .greaterThanOrEquals(500).and("foo").isEquals("bar").execute(); - assertEquals(MongoDbDataSet.class, ds.getClass()); - assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed()); - - try { - List<Object[]> objectArrays = ds.toObjectArrays(); - assertEquals(100, objectArrays.size()); - assertEquals("[500, record no. 500]", Arrays.toString(objectArrays.get(0))); - } finally { - ds.close(); - } - - ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id") - .greaterThanOrEquals(501).and("foo").isEquals("bar").execute(); - assertEquals(MongoDbDataSet.class, ds.getClass()); - assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed()); - - try { - List<Object[]> objectArrays = ds.toObjectArrays(); - assertEquals(99, objectArrays.size()); - assertEquals("[505, record no. 505]", Arrays.toString(objectArrays.get(0))); - } finally { - ds.close(); - } - - // test LESS_THAN_OR_EQUAL - - ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id").lessThanOrEquals(500) - .and("foo").isEquals("bar").execute(); - assertEquals(MongoDbDataSet.class, ds.getClass()); - assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed()); - - try { - List<Object[]> objectArrays = ds.toObjectArrays(); - assertEquals(101, objectArrays.size()); - assertEquals("[500, record no. 500]", Arrays.toString(objectArrays.get(100))); - } finally { - ds.close(); - } - - ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id").lessThanOrEquals(499) - .and("foo").isEquals("bar").execute(); - assertEquals(MongoDbDataSet.class, ds.getClass()); - assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed()); - - try { - List<Object[]> objectArrays = ds.toObjectArrays(); - assertEquals(100, objectArrays.size()); - assertEquals("[495, record no. 495]", Arrays.toString(objectArrays.get(99))); - } 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 - // Replace column index 0 by 1 - 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(); - } - - public void testCreateAndWriteData() throws Exception { - if (!isConfigured()) { - System.err.println(getInvalidConfigurationMessage()); - return; - } - final MongoDbDataContext dc = new MongoDbDataContext(db); - final Schema defaultSchema = dc.getDefaultSchema(); - - dc.executeUpdate(new UpdateScript() { - @Override - public void run(UpdateCallback callback) { - Table[] tables = defaultSchema.getTables(); - for (Table table : tables) { - callback.deleteFrom(table).execute(); - } - } - }); - - assertEquals(0, defaultSchema.getTableCount()); - - dc.executeUpdate(new UpdateScript() { - - @Override - public void run(UpdateCallback callback) { - Table table = callback.createTable(defaultSchema, "some_entries").withColumn("foo").withColumn("bar") - .withColumn("baz").withColumn("list").execute(); - - callback.insertInto(table).value("foo", 1).value("bar", "hello").execute(); - callback.insertInto(table).value("foo", 2).value("bar", "world").execute(); - callback.insertInto(table).value("foo", 3).value("bar", "hi").execute(); - - Map<String, Object> nestedObj = new HashMap<String, Object>(); - nestedObj.put("foo", "bar"); - nestedObj.put("123", 456); - - callback.insertInto(table).value("foo", 4).value("bar", "there").value("baz", nestedObj) - .value("list", Arrays.asList(1, 2, 3)).execute(); - } - }); - - DataSet dataSet; - assertEquals(1, defaultSchema.getTableCount()); - - // "Pure" SELECT COUNT(*) query - dataSet = dc.query().from("some_entries").selectCount().execute(); - dataSet.close(); - assertTrue(dataSet.next()); - assertEquals(1, dataSet.getSelectItems().length); - assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]); - assertEquals(4l, dataSet.getRow().getValue(SelectItem.getCountAllItem())); - assertFalse(dataSet.next()); - assertEquals(InMemoryDataSet.class, dataSet.getClass()); - - // A conditional SELECT COUNT(*) query - dataSet = dc.query().from("some_entries").selectCount().where("foo").greaterThan(2).execute(); - dataSet.close(); - assertTrue(dataSet.next()); - assertEquals(1, dataSet.getSelectItems().length); - assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]); - assertEquals(2l, dataSet.getRow().getValue(SelectItem.getCountAllItem())); - assertFalse(dataSet.next()); - assertEquals(InMemoryDataSet.class, dataSet.getClass()); - - // Select columns - dataSet = dc.query().from("some_entries").select("foo").and("bar").and("baz").and("list").execute(); - assertTrue(dataSet.next()); - assertEquals("Row[values=[1, hello, null, null]]", dataSet.getRow().toString()); - assertTrue(dataSet.next()); - assertEquals("Row[values=[2, world, null, null]]", dataSet.getRow().toString()); - assertTrue(dataSet.next()); - assertEquals("Row[values=[3, hi, null, null]]", dataSet.getRow().toString()); - assertTrue(dataSet.next()); - assertEquals("Row[values=[4, there, {123=456, foo=bar}, [ 1 , 2 , 3]]]", dataSet.getRow().toString()); - assertFalse(dataSet.next()); - dataSet.close(); - assertEquals(MongoDbDataSet.class, dataSet.getClass()); - - // delete some records - dc.executeUpdate(new UpdateScript() { - @Override - public void run(UpdateCallback callback) { - callback.deleteFrom("some_entries").where("foo").greaterThan(2).where("baz").isNotNull().execute(); - } - }); - - dataSet = dc.query().from("some_entries").select("foo").execute(); - assertTrue(dataSet.next()); - assertEquals("Row[values=[1]]", dataSet.getRow().toString()); - assertTrue(dataSet.next()); - assertEquals("Row[values=[2]]", dataSet.getRow().toString()); - assertTrue(dataSet.next()); - assertEquals("Row[values=[3]]", dataSet.getRow().toString()); - assertFalse(dataSet.next()); - dataSet.close(); - assertEquals(MongoDbDataSet.class, dataSet.getClass()); - - // drop the collection - dc.executeUpdate(new UpdateScript() { - @Override - public void run(UpdateCallback callback) { - callback.dropTable("some_entries").execute(); - } - }); - - assertNull(dc.getTableByQualifiedLabel("some_entries")); - - dc.refreshSchemas(); - assertEquals(0, defaultSchema.getTableCount()); - } - - public void testSelectWithLikeOperator() 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()); - } - - final BasicDBObject dbRow = new BasicDBObject(); - dbRow.append("name", new BasicDBObject().append("first", "John").append("last", "Doe")); - dbRow.append("gender", "MALE"); - col.insert(dbRow); - - final BasicDBObject dbRow2 = new BasicDBObject(); - dbRow2.append("name", new BasicDBObject().append("first", "Mary").append("last", "Johnson")); - dbRow2.append("gender", "FEMALE"); - col.insert(dbRow2); - - final BasicDBObject dbRow3 = new BasicDBObject(); - dbRow3.append("name", new BasicDBObject().append("first", "X").append("last", "Unknown")); - dbRow3.append("gender", "UNKNOWN"); - col.insert(dbRow3); - - final MongoDbDataContext dc = new MongoDbDataContext(db, new SimpleTableDef(getCollectionName(), new String[] { - "name.first", "name.last", "gender", "addresses", "addresses[0].city", "addresses[0].country", - "addresses[5].foobar" })); - - final DataSet ds1 = dc.executeQuery("select * from my_collection where gender LIKE '%MALE%'"); - final DataSet ds2 = dc.executeQuery("select * from my_collection where gender LIKE 'MALE%'"); - final DataSet ds3 = dc.executeQuery("select * from my_collection where gender LIKE '%NK%OW%'"); - final DataSet ds4 = dc.executeQuery("select * from my_collection where gender LIKE '%MALE'"); - try { - assertTrue(ds1.next()); - assertTrue(ds1.next()); - assertFalse(ds1.next()); - assertTrue(ds2.next()); - assertFalse(ds2.next()); - assertTrue(ds3.next()); - assertFalse(ds3.next()); - assertTrue(ds4.next()); - assertTrue(ds4.next()); - assertFalse(ds4.next()); - } finally { - ds1.close(); - ds2.close(); - ds3.close(); - ds4.close(); - } - } -} http://git-wip-us.apache.org/repos/asf/metamodel/blob/365fae3a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataCopyer.java ---------------------------------------------------------------------- diff --git a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataCopyer.java b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataCopyer.java deleted file mode 100644 index 5ecbcc5..0000000 --- a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataCopyer.java +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.metamodel.mongodb; - -import java.io.File; -import java.sql.Connection; -import java.sql.DriverManager; - -import org.apache.metamodel.DataContext; -import org.apache.metamodel.UpdateCallback; -import org.apache.metamodel.UpdateScript; -import org.apache.metamodel.data.DataSet; -import org.apache.metamodel.data.Row; -import org.apache.metamodel.insert.RowInsertionBuilder; -import org.apache.metamodel.jdbc.JdbcDataContext; -import org.apache.metamodel.schema.Column; -import org.apache.metamodel.schema.Schema; -import org.apache.metamodel.schema.Table; -import org.apache.metamodel.util.FileHelper; - -import com.mongodb.DB; -import com.mongodb.Mongo; - -/** - * Simple example program that can copy data to a MongoDB collection - */ -public class MongoDbDataCopyer { - - private final DataContext _sourceDataContext; - private final DB _mongoDb; - private final String _collectionName; - private final String _sourceSchemaName; - private final String _sourceTableName; - - // example copy job that will populate the mongodb with Derby data - public static void main(String[] args) throws Exception { - System.setProperty("derby.storage.tempDirector", FileHelper.getTempDir().getAbsolutePath()); - System.setProperty("derby.stream.error.file", File.createTempFile("metamodel-derby", ".log").getAbsolutePath()); - - File dbFile = new File("../jdbc/src/test/resources/derby_testdb.jar"); - dbFile = dbFile.getCanonicalFile(); - if (!dbFile.exists()) { - throw new IllegalStateException("File does not exist: " + dbFile); - } - - Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); - Connection connection = DriverManager.getConnection("jdbc:derby:jar:(" + dbFile.getAbsolutePath() - + ")derby_testdb;territory=en"); - connection.setReadOnly(true); - - DB db = new Mongo().getDB("orderdb_copy"); - - DataContext sourceDataContext = new JdbcDataContext(connection); - - new MongoDbDataCopyer(db, "orders", sourceDataContext, "APP", "orders").copy(); - new MongoDbDataCopyer(db, "offices", sourceDataContext, "APP", "offices").copy(); - new MongoDbDataCopyer(db, "payments", sourceDataContext, "APP", "payments").copy(); - new MongoDbDataCopyer(db, "orderfact", sourceDataContext, "APP", "orderfact").copy(); - new MongoDbDataCopyer(db, "products", sourceDataContext, "APP", "products").copy(); - - connection.close(); - } - - public MongoDbDataCopyer(DB mongoDb, String collectionName, DataContext sourceDataContext, String sourceSchemaName, - String sourceTableName) { - _mongoDb = mongoDb; - _collectionName = collectionName; - _sourceDataContext = sourceDataContext; - _sourceSchemaName = sourceSchemaName; - _sourceTableName = sourceTableName; - } - - public void copy() { - final MongoDbDataContext targetDataContext = new MongoDbDataContext(_mongoDb); - targetDataContext.executeUpdate(new UpdateScript() { - - @Override - public void run(UpdateCallback callback) { - final Table sourceTable = getSourceTable(); - final Table targetTable = callback.createTable(targetDataContext.getDefaultSchema(), _collectionName) - .like(sourceTable).execute(); - final Column[] sourceColumns = sourceTable.getColumns(); - final DataSet dataSet = _sourceDataContext.query().from(sourceTable).select(sourceColumns).execute(); - while (dataSet.next()) { - final Row row = dataSet.getRow(); - - RowInsertionBuilder insertBuilder = callback.insertInto(targetTable); - for (Column column : sourceColumns) { - insertBuilder = insertBuilder.value(column.getName(), row.getValue(column)); - } - insertBuilder.execute(); - } - dataSet.close(); - } - }); - } - - private Table getSourceTable() { - final Schema schema; - if (_sourceSchemaName != null) { - schema = _sourceDataContext.getSchemaByName(_sourceSchemaName); - } else { - schema = _sourceDataContext.getDefaultSchema(); - } - - return schema.getTableByName(_sourceTableName); - } -} http://git-wip-us.apache.org/repos/asf/metamodel/blob/365fae3a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java ---------------------------------------------------------------------- diff --git a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java deleted file mode 100644 index 4b83398..0000000 --- a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.metamodel.mongodb; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.Properties; - -import junit.framework.TestCase; - -public abstract class MongoDbTestCase extends TestCase { - - private static final String DEFAULT_TEST_COLLECTION_NAME = "my_collection"; - private static final String DEFAULT_TEST_DATABASE_NAME = "metamodel_test"; - - private String _hostname; - private String _collectionName; - private boolean _configured; - - private String _databaseName; - - @Override - protected void setUp() throws Exception { - super.setUp(); - - File file = new File(getPropertyFilePath()); - if (file.exists()) { - loadPropertyFile(file); - } else { - // Continuous integration case - if (System.getenv("CONTINUOUS_INTEGRATION") != null) { - File travisFile = new File("../travis-metamodel-integrationtest-configuration.properties"); - if (travisFile.exists()) { - loadPropertyFile(travisFile); - } else { - _configured = false; - } - } else { - _configured = false; - } - } - } - - private void loadPropertyFile(File file) throws FileNotFoundException, IOException { - Properties properties = new Properties(); - properties.load(new FileReader(file)); - _hostname = properties.getProperty("mongodb.hostname"); - - _databaseName = properties.getProperty("mongodb.databaseName"); - if (_databaseName == null || _databaseName.isEmpty()) { - _databaseName = DEFAULT_TEST_DATABASE_NAME; - } - - _collectionName = properties.getProperty("mongodb.collectionName"); - if (_collectionName == null || _collectionName.isEmpty()) { - _collectionName = DEFAULT_TEST_COLLECTION_NAME; - } - - _configured = (_hostname != null && !_hostname.isEmpty()); - - if (_configured) { - System.out.println("Loaded MongoDB configuration. Hostname=" + _hostname + ", Collection=" - + _collectionName); - } - - } - - private String getPropertyFilePath() { - String userHome = System.getProperty("user.home"); - return userHome + "/metamodel-integrationtest-configuration.properties"; - } - - protected String getInvalidConfigurationMessage() { - return "!!! WARN !!! MongoDB module ignored\r\n" + "Please configure mongodb connection locally (" - + getPropertyFilePath() + "), to run integration tests"; - } - - public String getDatabaseName() { - return _databaseName; - } - - public String getCollectionName() { - return _collectionName; - } - - public String getHostname() { - return _hostname; - } - - public boolean isConfigured() { - return _configured; - } -} http://git-wip-us.apache.org/repos/asf/metamodel/blob/365fae3a/spring/src/main/java/org/apache/metamodel/spring/MongoDbDataContextFactoryBeanDelegate.java ---------------------------------------------------------------------- diff --git a/spring/src/main/java/org/apache/metamodel/spring/MongoDbDataContextFactoryBeanDelegate.java b/spring/src/main/java/org/apache/metamodel/spring/MongoDbDataContextFactoryBeanDelegate.java index 9bc8279..84378f1 100644 --- a/spring/src/main/java/org/apache/metamodel/spring/MongoDbDataContextFactoryBeanDelegate.java +++ b/spring/src/main/java/org/apache/metamodel/spring/MongoDbDataContextFactoryBeanDelegate.java @@ -20,7 +20,7 @@ package org.apache.metamodel.spring; import org.apache.metamodel.DataContext; import org.apache.metamodel.DataContextFactory; -import org.apache.metamodel.mongodb.MongoDbDataContext; +import org.apache.metamodel.mongodb.mongo3.MongoDbDataContext; import org.apache.metamodel.util.SimpleTableDef; /**