You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/07/31 12:08:16 UTC

[1/5] cayenne git commit: Cleanup tests

Repository: cayenne
Updated Branches:
  refs/heads/master 36e23224d -> e616dc140


http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
index 1d6ae86..d74cffa 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
@@ -59,16 +59,15 @@ import java.util.Map;
 import java.util.TreeMap;
 
 /**
- * Default implementation of the AccessStack that has a single DataNode per
- * DataMap.
+ * Default implementation of the AccessStack that has a single DataNode per DataMap.
  */
 public class SchemaBuilder {
 
-	private static Logger logger = LoggerFactory.getLogger(SchemaBuilder.class);
+	private static final Logger logger = LoggerFactory.getLogger(SchemaBuilder.class);
 
 	public static final String SKIP_SCHEMA_KEY = "cayenneTestSkipSchemaCreation";
 
-	private static String[] MAPS_REQUIRING_SCHEMA_SETUP = { "testmap.map.xml", "compound.map.xml",
+	private static final String[] MAPS_REQUIRING_SCHEMA_SETUP = { "testmap.map.xml", "compound.map.xml",
 			"misc-types.map.xml", "things.map.xml", "numeric-types.map.xml", "binary-pk.map.xml", "no-pk.map.xml",
 			"lob.map.xml", "date-time.map.xml", "enum.map.xml", "extended-type.map.xml", "generated.map.xml",
 			"mixed-persistence-strategy.map.xml", "people.map.xml", "primitive.map.xml", "inheritance.map.xml",
@@ -146,7 +145,7 @@ public class SchemaBuilder {
 		}
 	}
 
-	private void initNode(DataMap map) throws Exception {
+	private void initNode(DataMap map) {
 
 		DataNode node = new DataNode(map.getName());
 		node.setJdbcEventLogger(jdbcEventLogger);
@@ -182,7 +181,7 @@ public class SchemaBuilder {
 			return;
 		}
 
-		List<DbEntity> entitiesToRemove = new ArrayList<DbEntity>();
+		List<DbEntity> entitiesToRemove = new ArrayList<>();
 
 		for (DbEntity ent : map.getDbEntities()) {
 			for (DbAttribute attr : ent.getAttributes()) {
@@ -239,7 +238,7 @@ public class SchemaBuilder {
 	 * Helper method that orders DbEntities to satisfy referential constraints
 	 * and returns an ordered list.
 	 */
-	private List<DbEntity> dbEntitiesInInsertOrder(DataNode node, DataMap map) {
+	private List<DbEntity> dbEntitiesInInsertOrder(DataMap map) {
 		TreeMap<String, DbEntity> dbEntityMap = new TreeMap<>(map.getDbEntityMap());
 		List<DbEntity> entities = new ArrayList<>(dbEntityMap.values());
 
@@ -260,6 +259,7 @@ public class SchemaBuilder {
 		return entities;
 	}
 
+	// This seems actually unused for some time now (from 2014 to 2018), and caused no trouble
 	private void dbEntitiesFilter(List<DbEntity> entities) {
 		// filter various unsupported tests...
 
@@ -268,7 +268,7 @@ public class SchemaBuilder {
 		boolean excludeBinPK = !unitDbAdapter.supportsBinaryPK();
 		if (excludeLOB || excludeBinPK) {
 
-			List<DbEntity> filtered = new ArrayList<DbEntity>();
+			List<DbEntity> filtered = new ArrayList<>();
 
 			for (DbEntity ent : entities) {
 
@@ -320,23 +320,21 @@ public class SchemaBuilder {
 
 	private void dropSchema(DataNode node, DataMap map) throws Exception {
 
-		List<DbEntity> list = dbEntitiesInInsertOrder(node, map);
+		List<DbEntity> list = dbEntitiesInInsertOrder(map);
 
-		try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection();) {
+		try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection()) {
 
 			DatabaseMetaData md = conn.getMetaData();
 			List<String> allTables = new ArrayList<>();
 
 			try (ResultSet tables = md.getTables(null, null, "%", null)) {
 				while (tables.next()) {
-					// 'toUpperCase' is needed since most databases
-					// are case insensitive, and some will convert names to
-					// lower
-					// case
-					// (PostgreSQL)
+					// 'toUpperCase' is needed since most databases are case insensitive,
+					// and some will convert names to lower case (e.g. PostgreSQL)
 					String name = tables.getString("TABLE_NAME");
-					if (name != null)
+					if (name != null) {
 						allTables.add(name.toUpperCase());
+					}
 				}
 			}
 
@@ -368,20 +366,20 @@ public class SchemaBuilder {
 	}
 
 	private void dropPKSupport(DataNode node, DataMap map) throws Exception {
-		List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(node, map);
+		List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(map);
 		node.getAdapter().getPkGenerator().dropAutoPk(node, filteredEntities);
 	}
 
 	private void createPKSupport(DataNode node, DataMap map) throws Exception {
-		List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(node, map);
+		List<DbEntity> filteredEntities = dbEntitiesInInsertOrder(map);
 		node.getAdapter().getPkGenerator().createAutoPk(node, filteredEntities);
 	}
 
 	private void createSchema(DataNode node, DataMap map) throws Exception {
 
-		try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection();) {
+		try (Connection conn = dataSourceFactory.getSharedDataSource().getConnection()) {
 			unitDbAdapter.willCreateTables(conn, map);
-			try (Statement stmt = conn.createStatement();) {
+			try (Statement stmt = conn.createStatement()) {
 
 				for (String query : tableCreateQueries(node, map)) {
 					logger.info(query);
@@ -395,12 +393,12 @@ public class SchemaBuilder {
 	/**
 	 * Returns iterator of preprocessed table create queries.
 	 */
-	private Collection<String> tableCreateQueries(DataNode node, DataMap map) throws Exception {
+	private Collection<String> tableCreateQueries(DataNode node, DataMap map) {
 		DbAdapter adapter = node.getAdapter();
 		DbGenerator gen = new DbGenerator(adapter, map, null, domain, jdbcEventLogger);
 
-		List<DbEntity> orderedEnts = dbEntitiesInInsertOrder(node, map);
-		List<String> queries = new ArrayList<String>();
+		List<DbEntity> orderedEnts = dbEntitiesInInsertOrder(map);
+		List<String> queries = new ArrayList<>();
 
 		// table definitions
 		for (DbEntity ent : orderedEnts) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
index 8689bb8..32d1dcc 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
@@ -42,8 +42,8 @@ import static org.junit.Assert.assertSame;
 /**
  * Testing qualifier translator correctness on reflexive relationships.
  */
-// TODO: this is really a qualifier translator general test... need to
-// find an appropriate place in unit tests..
+// TODO: this is really a qualifier translator general test...
+// need to find an appropriate place in unit tests..
 @UseServerRuntime(CayenneProjects.RELATIONSHIPS_PROJECT)
 public class CAY_194IT extends ServerCase {
 
@@ -78,15 +78,12 @@ public class CAY_194IT extends ServerCase {
         context.commitChanges();
 
         Expression qualifier = ExpressionFactory.matchExp("children", o2);
-        List<?> parents = context.performQuery(new SelectQuery(
-                ReflexiveAndToOne.class,
-                qualifier));
+        List<?> parents = SelectQuery.query(ReflexiveAndToOne.class, qualifier).select(context);
         assertEquals(1, parents.size());
         assertSame(o1, parents.get(0));
 
         qualifier = ExpressionFactory.matchExp("children", o1);
-        parents = context
-                .performQuery(new SelectQuery(ReflexiveAndToOne.class, qualifier));
+        parents = SelectQuery.query(ReflexiveAndToOne.class, qualifier).select(context);
         assertEquals(0, parents.size());
     }
 
@@ -105,9 +102,7 @@ public class CAY_194IT extends ServerCase {
         context.commitChanges();
 
         Expression qualifier = ExpressionFactory.matchExp("toParent", o1);
-        List<?> children = context.performQuery(new SelectQuery(
-                ReflexiveAndToOne.class,
-                qualifier));
+        List<ReflexiveAndToOne> children = SelectQuery.query(ReflexiveAndToOne.class, qualifier).select(context);
         assertEquals(1, children.size());
         assertSame(o2, children.get(0));
 


[2/5] cayenne git commit: Cleanup tests

Posted by nt...@apache.org.
Cleanup tests


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

Branch: refs/heads/master
Commit: 0a83ab70a386933a47d749f09dd52fab2d664a1b
Parents: 36e2322
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jul 31 14:55:00 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jul 31 14:55:00 2018 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/CDOOneToManyFKIT.java    |  17 +-
 .../access/DataContextCompoundRelIT.java        |  64 ++--
 .../DataContextDisjointByIdPrefetchIT.java      | 108 +++----
 ...ataContextDisjointByIdPrefetch_ExtrasIT.java | 228 +++++++------
 .../access/DataContextEJBQLFetchJoinIT.java     | 316 +++++++++----------
 .../DataContextFlattenedAttributesIT.java       |  43 +--
 .../access/DataContextJoinAliasesIT.java        |  10 +-
 .../cayenne/access/DataContextOrderingIT.java   |   3 +-
 .../cayenne/access/DataContextOuterJoinsIT.java |  10 +-
 .../DataContextSelectQuerySplitAliasesIT.java   |   8 +-
 .../apache/cayenne/access/DeleteObjectIT.java   |   3 +-
 .../cayenne/access/QuotedIdentifiersIT.java     |  94 ++++--
 .../cayenne/access/ReturnTypesMappingIT.java    |   8 +-
 .../configuration/xml/BaseHandlerTest.java      |   2 +-
 .../cayenne/dba/DefaultQuotingStrategyTest.java |   4 +-
 .../apache/cayenne/query/SelectQueryClobIT.java |   8 +-
 .../org/apache/cayenne/query/SelectQueryIT.java |   8 +-
 .../cayenne/unit/di/server/SchemaBuilder.java   |  44 ++-
 .../org/apache/cayenne/unit/jira/CAY_194IT.java |  15 +-
 19 files changed, 475 insertions(+), 518 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/CDOOneToManyFKIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/CDOOneToManyFKIT.java b/cayenne-server/src/test/java/org/apache/cayenne/CDOOneToManyFKIT.java
index a442452..2f02a14 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/CDOOneToManyFKIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/CDOOneToManyFKIT.java
@@ -33,8 +33,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 
-// TODO: this mapping scenario is really unsupported ... this is just an attempt at
-// partial solution
+// TODO: this mapping scenario is really unsupported ... this is just an attempt at partial solution
 @UseServerRuntime(CayenneProjects.RELATIONSHIPS_TO_MANY_FK_PROJECT)
 public class CDOOneToManyFKIT extends ServerCase {
 
@@ -42,17 +41,17 @@ public class CDOOneToManyFKIT extends ServerCase {
     protected DataContext context;
 
     @Test
-    public void testReadRelationship() throws Exception {
+    public void testReadRelationship() {
 
         ToManyRoot2 src2 = context.newObject(ToManyRoot2.class);
         ToManyFkRoot src = context.newObject(ToManyFkRoot.class);
 
         // this should go away when such mapping becomes fully supported
-        src.setDepId(new Integer(1));
+        src.setDepId(1);
         ToManyFkDep target = context.newObject(ToManyFkDep.class);
 
         // this should go away when such mapping becomes fully supported
-        target.setDepId(new Integer(1));
+        target.setDepId(1);
         target.setRoot2(src2);
 
         src.addToDeps(target);
@@ -60,17 +59,15 @@ public class CDOOneToManyFKIT extends ServerCase {
 
         context.invalidateObjects(src, target, src2);
 
-        ToManyFkRoot src1 = (ToManyFkRoot) Cayenne
-                .objectForPK(context, src.getObjectId());
+        ToManyFkRoot src1 = (ToManyFkRoot) Cayenne.objectForPK(context, src.getObjectId());
         assertNotNull(src1.getDeps());
         assertEquals(1, src1.getDeps().size());
         // resolve HOLLOW
-        assertSame(src1, ((ToManyFkDep) src1.getDeps().get(0)).getRoot());
+        assertSame(src1, src1.getDeps().get(0).getRoot());
 
         context.invalidateObjects(src1, src1.getDeps().get(0));
 
-        ToManyFkDep target2 = (ToManyFkDep) Cayenne.objectForPK(context, target
-                .getObjectId());
+        ToManyFkDep target2 = (ToManyFkDep) Cayenne.objectForPK(context, target.getObjectId());
         assertNotNull(target2.getRoot());
 
         // resolve HOLLOW

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextCompoundRelIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextCompoundRelIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextCompoundRelIT.java
index be2041f..c7eaa20 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextCompoundRelIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextCompoundRelIT.java
@@ -48,9 +48,9 @@ public class DataContextCompoundRelIT extends ServerCase {
 
     @Test
     public void testInsert() {
-
         CompoundPkTestEntity master = context.newObject(CompoundPkTestEntity.class);
         CompoundFkTestEntity detail = context.newObject(CompoundFkTestEntity.class);
+
         master.addToCompoundFkArray(detail);
         master.setName("m1");
         master.setKey1("key11");
@@ -60,30 +60,24 @@ public class DataContextCompoundRelIT extends ServerCase {
         context.commitChanges();
         context.invalidateObjects(master, detail);
 
-        SelectQuery q = new SelectQuery(CompoundPkTestEntity.class);
-        List<?> objs = context1.performQuery(q);
-        assertEquals(1, objs.size());
+        SelectQuery<CompoundPkTestEntity> q = SelectQuery.query(CompoundPkTestEntity.class);
+        List<CompoundPkTestEntity> objs = q.select(context1);
 
-        master = (CompoundPkTestEntity) objs.get(0);
-        assertEquals("m1", master.getName());
+        assertEquals(1, objs.size());
+        assertEquals("m1", objs.get(0).getName());
 
-        List<?> details = master.getCompoundFkArray();
+        List<CompoundFkTestEntity> details = objs.get(0).getCompoundFkArray();
         assertEquals(1, details.size());
-        detail = (CompoundFkTestEntity) details.get(0);
-
-        assertEquals("d1", detail.getName());
+        assertEquals("d1", details.get(0).getName());
     }
 
     @Test
     public void testFetchQualifyingToOne() {
-        CompoundPkTestEntity master = (CompoundPkTestEntity) context
-                .newObject("CompoundPkTestEntity");
-        CompoundPkTestEntity master1 = (CompoundPkTestEntity) context
-                .newObject("CompoundPkTestEntity");
-        CompoundFkTestEntity detail = (CompoundFkTestEntity) context
-                .newObject("CompoundFkTestEntity");
-        CompoundFkTestEntity detail1 = (CompoundFkTestEntity) context
-                .newObject("CompoundFkTestEntity");
+        CompoundPkTestEntity master  = context.newObject(CompoundPkTestEntity.class);
+        CompoundPkTestEntity master1 = context.newObject(CompoundPkTestEntity.class);
+        CompoundFkTestEntity detail  = context.newObject(CompoundFkTestEntity.class);
+        CompoundFkTestEntity detail1 = context.newObject(CompoundFkTestEntity.class);
+
         master.addToCompoundFkArray(detail);
         master1.addToCompoundFkArray(detail1);
 
@@ -96,31 +90,26 @@ public class DataContextCompoundRelIT extends ServerCase {
         master1.setKey2("key22");
 
         detail.setName("d1");
-
         detail1.setName("d2");
 
         context.commitChanges();
         context.invalidateObjects(master, master1, detail, detail1);
 
         Expression qual = ExpressionFactory.matchExp("toCompoundPk", master);
-        SelectQuery q = new SelectQuery(CompoundFkTestEntity.class, qual);
-        List<?> objs = context1.performQuery(q);
-        assertEquals(1, objs.size());
+        SelectQuery<CompoundFkTestEntity> q = SelectQuery.query(CompoundFkTestEntity.class, qual);
+        List<CompoundFkTestEntity> objs = q.select(context1);
 
-        detail = (CompoundFkTestEntity) objs.get(0);
-        assertEquals("d1", detail.getName());
+        assertEquals(1, objs.size());
+        assertEquals("d1", objs.get(0).getName());
     }
 
     @Test
-    public void testFetchQualifyingToMany() throws Exception {
-        CompoundPkTestEntity master = (CompoundPkTestEntity) context
-                .newObject("CompoundPkTestEntity");
-        CompoundPkTestEntity master1 = (CompoundPkTestEntity) context
-                .newObject("CompoundPkTestEntity");
-        CompoundFkTestEntity detail = (CompoundFkTestEntity) context
-                .newObject("CompoundFkTestEntity");
-        CompoundFkTestEntity detail1 = (CompoundFkTestEntity) context
-                .newObject("CompoundFkTestEntity");
+    public void testFetchQualifyingToMany() {
+        CompoundPkTestEntity master  = context.newObject(CompoundPkTestEntity.class);
+        CompoundPkTestEntity master1 = context.newObject(CompoundPkTestEntity.class);
+        CompoundFkTestEntity detail  = context.newObject(CompoundFkTestEntity.class);
+        CompoundFkTestEntity detail1 = context.newObject(CompoundFkTestEntity.class);
+
         master.addToCompoundFkArray(detail);
         master1.addToCompoundFkArray(detail1);
 
@@ -140,11 +129,10 @@ public class DataContextCompoundRelIT extends ServerCase {
         context.invalidateObjects(master, master1, detail, detail1);
 
         Expression qual = ExpressionFactory.matchExp("compoundFkArray", detail1);
-        SelectQuery q = new SelectQuery(CompoundPkTestEntity.class, qual);
-        List<?> objs = context1.performQuery(q);
-        assertEquals(1, objs.size());
+        SelectQuery<CompoundPkTestEntity> q = SelectQuery.query(CompoundPkTestEntity.class, qual);
+        List<CompoundPkTestEntity> objs = q.select(context1);
 
-        master = (CompoundPkTestEntity) objs.get(0);
-        assertEquals("m2", master.getName());
+        assertEquals(1, objs.size());
+        assertEquals("m2", objs.get(0).getName());
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java
index 57831f5..2dd4c15 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetchIT.java
@@ -29,7 +29,6 @@ import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.testdo.testmap.Painting;
 import org.apache.cayenne.testdo.testmap.PaintingInfo;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
-import org.apache.cayenne.unit.di.UnitTestClosure;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -115,29 +114,27 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase {
     public void testOneToMany() throws Exception {
         createArtistWithTwoPaintingsDataSet();
 
-        SelectQuery query = new SelectQuery(Artist.class);
+        SelectQuery<Artist> query = SelectQuery.query(Artist.class);
         query.addPrefetch(Artist.PAINTING_ARRAY.disjointById());
-
-        final List<Artist> result = context.performQuery(query);
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                Artist b1 = result.get(0);
-                List<Painting> toMany = (List<Painting>) b1.readPropertyDirectly(Artist.PAINTING_ARRAY.getName());
-                assertNotNull(toMany);
-                assertFalse(((ValueHolder) toMany).isFault());
-                assertEquals(2, toMany.size());
-
-                List<String> names = new ArrayList<String>();
-                for (Painting b : toMany) {
-                    assertEquals(PersistenceState.COMMITTED, b.getPersistenceState());
-                    names.add(b.getPaintingTitle());
-                }
-
-                assertTrue(names.contains("Y1"));
-                assertTrue(names.contains("Y2"));
+        List<Artist> result = query.select(context);
+
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            Artist b1 = result.get(0);
+            @SuppressWarnings("unchecked")
+            List<Painting> toMany = (List<Painting>) b1.readPropertyDirectly(Artist.PAINTING_ARRAY.getName());
+            assertNotNull(toMany);
+            assertFalse(((ValueHolder) toMany).isFault());
+            assertEquals(2, toMany.size());
+
+            List<String> names = new ArrayList<>();
+            for (Painting b : toMany) {
+                assertEquals(PersistenceState.COMMITTED, b.getPersistenceState());
+                names.add(b.getPaintingTitle());
             }
+
+            assertTrue(names.contains("Y1"));
+            assertTrue(names.contains("Y2"));
         });
     }
 
@@ -145,19 +142,16 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase {
     public void testManyToOne() throws Exception {
         createArtistWithTwoPaintingsDataSet();
 
-        SelectQuery query = new SelectQuery(Painting.class);
+        SelectQuery<Painting> query = SelectQuery.query(Painting.class);
         query.addPrefetch(Painting.TO_ARTIST.disjointById());
 
-        final List<Painting> result = context.performQuery(query);
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                Painting b1 = result.get(0);
-                assertNotNull(b1.getToArtist());
-                assertEquals(PersistenceState.COMMITTED, b1.getToArtist().getPersistenceState());
-                assertEquals("X", b1.getToArtist().getArtistName());
-            }
+        final List<Painting> result = query.select(context);
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            Painting b1 = result.get(0);
+            assertNotNull(b1.getToArtist());
+            assertEquals(PersistenceState.COMMITTED, b1.getToArtist().getPersistenceState());
+            assertEquals("X", b1.getToArtist().getArtistName());
         });
     }
 
@@ -165,7 +159,7 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase {
     public void testFetchLimit() throws Exception {
         createThreeArtistsWithPlentyOfPaintingsDataSet();
 
-        final SelectQuery query = new SelectQuery(Artist.class);
+        SelectQuery<Artist> query = SelectQuery.query(Artist.class);
         query.addPrefetch(Artist.PAINTING_ARRAY.disjointById());
         query.addOrdering("db:" + Artist.ARTIST_ID_PK_COLUMN, SortOrder.ASCENDING);
 
@@ -174,22 +168,19 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase {
         // There will be only 2 bags in a result. The first bag has 5 boxes and
         // the second has 2. So we are expecting exactly 9 snapshots in the data
         // row store after performing the query.
-        final List<Artist> bags = context.performQuery(query);
+        final List<Artist> bags = query.select(context);
 
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+        queryInterceptor.runWithQueriesBlocked(() -> {
 
-            public void execute() {
+            assertEquals(2, bags.size());
 
-                assertEquals(2, bags.size());
+            assertEquals(5, bags.get(0).getPaintingArray().size());
+            assertEquals(2, bags.get(1).getPaintingArray().size());
 
-                assertEquals(5, bags.get(0).getPaintingArray().size());
-                assertEquals(2, bags.get(1).getPaintingArray().size());
-
-                for (Artist b : bags) {
-                    b.getArtistName();
-                    for (Painting bx : b.getPaintingArray()) {
-                        bx.getPaintingTitle();
-                    }
+            for (Artist b : bags) {
+                b.getArtistName();
+                for (Painting bx : b.getPaintingArray()) {
+                    bx.getPaintingTitle();
                 }
             }
         });
@@ -199,22 +190,19 @@ public class DataContextDisjointByIdPrefetchIT extends ServerCase {
     public void testOneToOneRelationship() throws Exception {
         createTwoPaintingsWithInfosDataSet();
 
-        SelectQuery query = new SelectQuery(Painting.class);
+        SelectQuery<Painting> query = SelectQuery.query(Painting.class);
         query.addPrefetch(Painting.TO_PAINTING_INFO.disjointById());
-        final List<Painting> result = context.performQuery(query);
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                List<String> boxColors = new ArrayList<String>();
-                for (Painting box : result) {
-                    PaintingInfo info = (PaintingInfo) box.readPropertyDirectly(Painting.TO_PAINTING_INFO.getName());
-                    assertNotNull(info);
-                    boxColors.add(info.getTextReview());
-                    assertEquals(PersistenceState.COMMITTED, info.getPersistenceState());
-                }
-                assertTrue(boxColors.containsAll(Arrays.asList("red", "green")));
+        final List<Painting> result = query.select(context);
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            List<String> boxColors = new ArrayList<>();
+            for (Painting box : result) {
+                PaintingInfo info = (PaintingInfo) box.readPropertyDirectly(Painting.TO_PAINTING_INFO.getName());
+                assertNotNull(info);
+                boxColors.add(info.getTextReview());
+                assertEquals(PersistenceState.COMMITTED, info.getPersistenceState());
             }
+            assertTrue(boxColors.containsAll(Arrays.asList("red", "green")));
         });
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetch_ExtrasIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetch_ExtrasIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetch_ExtrasIT.java
index 44b2060..1ec7722 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetch_ExtrasIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextDisjointByIdPrefetch_ExtrasIT.java
@@ -30,7 +30,6 @@ import org.apache.cayenne.testdo.things.Ball;
 import org.apache.cayenne.testdo.things.Box;
 import org.apache.cayenne.testdo.things.Thing;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
-import org.apache.cayenne.unit.di.UnitTestClosure;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -41,6 +40,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import static org.hamcrest.CoreMatchers.hasItems;
 import static org.junit.Assert.*;
 
 @UseServerRuntime(CayenneProjects.THINGS_PROJECT)
@@ -123,27 +123,26 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testFlattenedRelationship() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery query = new SelectQuery(Bag.class);
+        SelectQuery<Bag> query = SelectQuery.query(Bag.class);
         query.addPrefetch(Bag.BALLS.disjointById());
-        final List<Bag> result = context.performQuery(query);
 
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                Bag b1 = result.get(0);
-                List<Ball> balls = (List<Ball>) b1.readPropertyDirectly(Bag.BALLS.getName());
-                assertNotNull(balls);
-                assertFalse(((ValueHolder) balls).isFault());
-                assertEquals(6, balls.size());
-
-                List<Integer> volumes = new ArrayList<Integer>();
-                for (Ball b : balls) {
-                    assertEquals(PersistenceState.COMMITTED, b.getPersistenceState());
-                    volumes.add(b.getThingVolume());
-                }
-                assertTrue(volumes.containsAll(Arrays.asList(10, 20, 30, 40, 20, 40)));
+        final List<Bag> result = query.select(context);
+
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            Bag b1 = result.get(0);
+            @SuppressWarnings("unchecked")
+            List<Ball> balls = (List<Ball>) b1.readPropertyDirectly(Bag.BALLS.getName());
+            assertNotNull(balls);
+            assertFalse(((ValueHolder) balls).isFault());
+            assertEquals(6, balls.size());
+
+            List<Integer> volumes = new ArrayList<>();
+            for (Ball b : balls) {
+                assertEquals(PersistenceState.COMMITTED, b.getPersistenceState());
+                volumes.add(b.getThingVolume());
             }
+            assertThat(volumes, hasItems(10, 20, 30, 40, 20, 40));
         });
     }
 
@@ -151,27 +150,25 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testFlattenedMultiColumnRelationship() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery query = new SelectQuery(Box.class);
+        SelectQuery<Box> query = new SelectQuery<>(Box.class);
         query.addPrefetch(Box.THINGS.disjointById());
-        final List<Box> result = context.performQuery(query);
-
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                List<Integer> volumes = new ArrayList<Integer>();
-                for (Box box : result) {
-                    List<Thing> things = (List<Thing>) box.readPropertyDirectly(Box.THINGS.getName());
-                    assertNotNull(things);
-                    assertFalse(((ValueHolder) things).isFault());
-                    for (Thing t : things) {
-                        assertEquals(PersistenceState.COMMITTED, t.getPersistenceState());
-                        volumes.add(t.getVolume());
-                    }
+        final List<Box> result = query.select(context);
+
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            List<Integer> volumes = new ArrayList<>();
+            for (Box box : result) {
+                @SuppressWarnings("unchecked")
+                List<Thing> things = (List<Thing>) box.readPropertyDirectly(Box.THINGS.getName());
+                assertNotNull(things);
+                assertFalse(((ValueHolder) things).isFault());
+                for (Thing t : things) {
+                    assertEquals(PersistenceState.COMMITTED, t.getPersistenceState());
+                    volumes.add(t.getVolume());
                 }
-                assertEquals(6, volumes.size());
-                assertTrue(volumes.containsAll(Arrays.asList(10, 20, 30, 40)));
             }
+            assertEquals(6, volumes.size());
+            assertTrue(volumes.containsAll(Arrays.asList(10, 20, 30, 40)));
         });
     }
 
@@ -179,27 +176,25 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testLongFlattenedRelationship() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery query = new SelectQuery(Bag.class);
+        SelectQuery<Bag> query = new SelectQuery<>(Bag.class);
         query.addPrefetch(Bag.THINGS.disjointById());
-        final List<Bag> result = context.performQuery(query);
-
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                Bag b1 = result.get(0);
-                List<Thing> things = (List<Thing>) b1.readPropertyDirectly(Bag.THINGS.getName());
-                assertNotNull(things);
-                assertFalse(((ValueHolder) things).isFault());
-                assertEquals(6, things.size());
-
-                List<Integer> volumes = new ArrayList<Integer>();
-                for (Thing t : things) {
-                    assertEquals(PersistenceState.COMMITTED, t.getPersistenceState());
-                    volumes.add(t.getVolume());
-                }
-                assertTrue(volumes.containsAll(Arrays.asList(10, 20, 20, 30, 40, 40)));
+        final List<Bag> result = query.select(context);
+
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            Bag b1 = result.get(0);
+            @SuppressWarnings("unchecked")
+            List<Thing> things = (List<Thing>) b1.readPropertyDirectly(Bag.THINGS.getName());
+            assertNotNull(things);
+            assertFalse(((ValueHolder) things).isFault());
+            assertEquals(6, things.size());
+
+            List<Integer> volumes = new ArrayList<>();
+            for (Thing t : things) {
+                assertEquals(PersistenceState.COMMITTED, t.getPersistenceState());
+                volumes.add(t.getVolume());
             }
+            assertTrue(volumes.containsAll(Arrays.asList(10, 20, 20, 30, 40, 40)));
         });
     }
 
@@ -207,22 +202,19 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testMultiColumnRelationship() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery query = new SelectQuery(Ball.class);
+        SelectQuery<Ball> query = SelectQuery.query(Ball.class);
         query.orQualifier(Ball.THING_VOLUME.eq(40).andExp(Ball.THING_WEIGHT.eq(30)));
         query.orQualifier(Ball.THING_VOLUME.eq(20).andExp(Ball.THING_WEIGHT.eq(10)));
 
         query.addPrefetch(Ball.THING.disjointById());
 
-        final List<Ball> balls = context.performQuery(query);
-
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+        final List<Ball> balls = query.select(context);
 
-            public void execute() {
-
-                assertEquals(2, balls.size());
-
-                balls.get(0).getThing().getVolume();
-                balls.get(1).getThing().getVolume();
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertEquals(2, balls.size());
+            for(Ball next : balls) {
+                assertNotNull(balls.get(0).getThing());
+                next.getThing().getVolume();
             }
         });
     }
@@ -231,30 +223,28 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testJointPrefetchInParent() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery query = new SelectQuery(Box.class);
+        SelectQuery<Box> query = new SelectQuery<>(Box.class);
         query.addPrefetch(Box.BALLS.disjointById());
         query.addPrefetch(Box.BALLS.dot(Ball.THING).disjointById());
-        final List<Box> result = context.performQuery(query);
-
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-                assertFalse(result.isEmpty());
-                List<Integer> volumes = new ArrayList<Integer>();
-                for (Box box : result) {
-                    List<Ball> balls = (List<Ball>) box.readPropertyDirectly(Box.BALLS.getName());
-                    assertNotNull(balls);
-                    assertFalse(((ValueHolder) balls).isFault());
-                    for (Ball ball : balls) {
-                        Thing thing = (Thing) ball.readPropertyDirectly(Ball.THING.getName());
-                        assertNotNull(thing);
-                        assertEquals(PersistenceState.COMMITTED, thing.getPersistenceState());
-                        volumes.add(thing.getVolume());
-                    }
+        final List<Box> result = query.select(context);
+
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+            List<Integer> volumes = new ArrayList<>();
+            for (Box box : result) {
+                @SuppressWarnings("unchecked")
+                List<Ball> balls = (List<Ball>) box.readPropertyDirectly(Box.BALLS.getName());
+                assertNotNull(balls);
+                assertFalse(((ValueHolder) balls).isFault());
+                for (Ball ball : balls) {
+                    Thing thing = (Thing) ball.readPropertyDirectly(Ball.THING.getName());
+                    assertNotNull(thing);
+                    assertEquals(PersistenceState.COMMITTED, thing.getPersistenceState());
+                    volumes.add(thing.getVolume());
                 }
-                assertEquals(6, volumes.size());
-                assertTrue(volumes.containsAll(Arrays.asList(10, 20, 30, 40)));
             }
+            assertEquals(6, volumes.size());
+            assertTrue(volumes.containsAll(Arrays.asList(10, 20, 30, 40)));
         });
     }
 
@@ -262,46 +252,44 @@ public class DataContextDisjointByIdPrefetch_ExtrasIT extends ServerCase {
     public void testJointPrefetchInChild() throws Exception {
         createBagWithTwoBoxesAndPlentyOfBallsDataSet();
 
-        SelectQuery<Bag> query = new SelectQuery<Bag>(Bag.class);
+        SelectQuery<Bag> query = new SelectQuery<>(Bag.class);
         query.addPrefetch(Bag.BOXES.disjointById());
         query.addPrefetch(Bag.BOXES.dot(Box.BALLS).joint());
         final List<Bag> result = context.select(query);
 
-        queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
-        	@Override
-            public void execute() {
-                assertFalse(result.isEmpty());
-
-                Bag bag = result.get(0);
-                List<Box> boxes = (List<Box>) bag.readPropertyDirectly(Bag.BOXES.getName());
-                assertNotNull(boxes);
-                assertFalse(((ValueHolder) boxes).isFault());
-                assertEquals(2, boxes.size());
-
-                Box big = null;
-                List<String> names = new ArrayList<String>();
-                for (Box box : boxes) {
-                    assertEquals(PersistenceState.COMMITTED, box.getPersistenceState());
-                    names.add(box.getName());
-                    if (box.getName().equals("big")) {
-                        big = box;
-                    }
+        queryInterceptor.runWithQueriesBlocked(() -> {
+            assertFalse(result.isEmpty());
+
+            Bag bag = result.get(0);
+            @SuppressWarnings("unchecked")
+            List<Box> boxes = (List<Box>) bag.readPropertyDirectly(Bag.BOXES.getName());
+            assertNotNull(boxes);
+            assertFalse(((ValueHolder) boxes).isFault());
+            assertEquals(2, boxes.size());
+
+            Box big = null;
+            List<String> names = new ArrayList<>();
+            for (Box box : boxes) {
+                assertEquals(PersistenceState.COMMITTED, box.getPersistenceState());
+                names.add(box.getName());
+                if (box.getName().equals("big")) {
+                    big = box;
                 }
-                assertTrue(names.contains("big"));
-                assertTrue(names.contains("small"));
-
-                List<Ball> balls = (List<Ball>) big.readPropertyDirectly(Box.BALLS.getName());
-                assertNotNull(balls);
-                assertFalse(((ValueHolder) balls).isFault());
-                assertEquals(2, balls.size());
-                List<Integer> volumes = new ArrayList<Integer>();
-                for (Ball ball : balls) {
-                    assertEquals(PersistenceState.COMMITTED, ball.getPersistenceState());
-                    volumes.add(ball.getThingVolume());
-                }
-                assertTrue(volumes.containsAll(Arrays.asList(10, 20)));
             }
+            assertTrue(names.contains("big"));
+            assertTrue(names.contains("small"));
+
+            @SuppressWarnings("unchecked")
+            List<Ball> balls = (List<Ball>) big.readPropertyDirectly(Box.BALLS.getName());
+            assertNotNull(balls);
+            assertFalse(((ValueHolder) balls).isFault());
+            assertEquals(2, balls.size());
+            List<Integer> volumes = new ArrayList<>();
+            for (Ball ball : balls) {
+                assertEquals(PersistenceState.COMMITTED, ball.getPersistenceState());
+                volumes.add(ball.getThingVolume());
+            }
+            assertTrue(volumes.containsAll(Arrays.asList(10, 20)));
         });
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinIT.java
index f802a6d..e55a54a 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextEJBQLFetchJoinIT.java
@@ -128,25 +128,21 @@ public class DataContextEJBQLFetchJoinIT extends ServerCase {
 
         final List<?> objects = context.performQuery(query);
 
-        queryBlocker.runWithQueriesBlocked(new UnitTestClosure() {
+        queryBlocker.runWithQueriesBlocked(() -> {
 
-            public void execute() {
+            assertEquals(2, objects.size());
 
-                assertEquals(2, objects.size());
+            for (Object object : objects) {
+                Artist a = (Artist) object;
+                List<Painting> list = a.getPaintingArray();
 
-                Iterator<?> it = objects.iterator();
-                while (it.hasNext()) {
-                    Artist a = (Artist) it.next();
-                    List<Painting> list = a.getPaintingArray();
+                assertNotNull(list);
+                assertFalse(((ValueHolder) list).isFault());
 
-                    assertNotNull(list);
-                    assertFalse(((ValueHolder) list).isFault());
-
-                    for (Painting p : list) {
-                        assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                        // make sure properties are not null..
-                        assertNotNull(p.getPaintingTitle());
-                    }
+                for (Painting p : list) {
+                    assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+                    // make sure properties are not null..
+                    assertNotNull(p.getPaintingTitle());
                 }
             }
         });
@@ -164,46 +160,38 @@ public class DataContextEJBQLFetchJoinIT extends ServerCase {
 
         final List<?> objects = context.performQuery(query);
 
-        queryBlocker.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-
-                assertEquals(1, objects.size());
+        queryBlocker.runWithQueriesBlocked(() -> {
 
-                Artist a = (Artist) objects.get(0);
-                assertEquals("A1", a.getArtistName());
+            assertEquals(1, objects.size());
 
-                List<Painting> paintings = a.getPaintingArray();
+            Artist a = (Artist) objects.get(0);
+            assertEquals("A1", a.getArtistName());
 
-                assertNotNull(paintings);
-                assertFalse(((ValueHolder) paintings).isFault());
-                assertEquals(2, paintings.size());
+            List<Painting> paintings = a.getPaintingArray();
 
-                List<String> expectedPaintingsNames = new ArrayList<String>();
-                expectedPaintingsNames.add("P11");
-                expectedPaintingsNames.add("P12");
+            assertNotNull(paintings);
+            assertFalse(((ValueHolder) paintings).isFault());
+            assertEquals(2, paintings.size());
 
-                Iterator<Painting> paintingsIterator = paintings.iterator();
-                while (paintingsIterator.hasNext()) {
-                    Painting p = paintingsIterator.next();
-                    assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                    assertNotNull(p.getPaintingTitle());
-                    assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
-                }
+            List<String> expectedPaintingsNames = new ArrayList<>();
+            expectedPaintingsNames.add("P11");
+            expectedPaintingsNames.add("P12");
 
-                List<ArtistExhibit> exibits = a.getArtistExhibitArray();
+            for (Painting p : paintings) {
+                assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+                assertNotNull(p.getPaintingTitle());
+                assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
+            }
 
-                assertNotNull(exibits);
-                assertFalse(((ValueHolder) exibits).isFault());
-                assertEquals(2, exibits.size());
+            List<ArtistExhibit> exibits = a.getArtistExhibitArray();
 
-                Iterator<ArtistExhibit> exibitsIterator = exibits.iterator();
-                while (exibitsIterator.hasNext()) {
-                    ArtistExhibit ae = exibitsIterator.next();
-                    assertEquals(PersistenceState.COMMITTED, ae.getPersistenceState());
-                    assertNotNull(ae.getObjectId());
+            assertNotNull(exibits);
+            assertFalse(((ValueHolder) exibits).isFault());
+            assertEquals(2, exibits.size());
 
-                }
+            for (ArtistExhibit ae : exibits) {
+                assertEquals(PersistenceState.COMMITTED, ae.getPersistenceState());
+                assertNotNull(ae.getObjectId());
             }
         });
     }
@@ -220,14 +208,10 @@ public class DataContextEJBQLFetchJoinIT extends ServerCase {
 
         final List<?> objects = context.performQuery(query);
 
-        queryBlocker.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
-
-                assertNotNull(objects);
-                assertFalse(objects.isEmpty());
-                assertEquals(1, objects.size());
-            }
+        queryBlocker.runWithQueriesBlocked(() -> {
+            assertNotNull(objects);
+            assertFalse(objects.isEmpty());
+            assertEquals(1, objects.size());
         });
     }
 
@@ -243,71 +227,68 @@ public class DataContextEJBQLFetchJoinIT extends ServerCase {
 
         final List<?> objects = context.performQuery(query);
 
-        queryBlocker.runWithQueriesBlocked(new UnitTestClosure() {
+        queryBlocker.runWithQueriesBlocked(() -> {
 
-            public void execute() {
+            assertEquals(2, objects.size());
 
-                assertEquals(2, objects.size());
+            Object[] firstRow = (Object[]) objects.get(0);
+            Artist a = (Artist) firstRow[0];
+            assertEquals("A1", a.getArtistName());
 
-                Object[] firstRow = (Object[]) objects.get(0);
-                Artist a = (Artist) firstRow[0];
-                assertEquals("A1", a.getArtistName());
+            List<Painting> paintings = a.getPaintingArray();
 
-                List<Painting> paintings = a.getPaintingArray();
+            assertNotNull(paintings);
+            assertFalse(((ValueHolder) paintings).isFault());
+            assertEquals(2, paintings.size());
 
-                assertNotNull(paintings);
-                assertFalse(((ValueHolder) paintings).isFault());
-                assertEquals(2, paintings.size());
-
-                List<String> expectedPaintingsNames = new ArrayList<String>();
-                expectedPaintingsNames.add("P11");
-                expectedPaintingsNames.add("P12");
-
-                Iterator<Painting> paintingsIterator = paintings.iterator();
-                while (paintingsIterator.hasNext()) {
-                    Painting p = paintingsIterator.next();
-                    assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                    assertNotNull(p.getPaintingTitle());
-                    assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
-                }
-                String artistName = (String) firstRow[1];
-                assertEquals("A1", artistName);
+            List<String> expectedPaintingsNames = new ArrayList<>();
+            expectedPaintingsNames.add("P11");
+            expectedPaintingsNames.add("P12");
 
-                Gallery g1 = (Gallery) firstRow[2];
-                assertEquals("gallery1", g1.getGalleryName());
+            Iterator<Painting> paintingsIterator = paintings.iterator();
+            while (paintingsIterator.hasNext()) {
+                Painting p = paintingsIterator.next();
+                assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+                assertNotNull(p.getPaintingTitle());
+                assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
+            }
+            String artistName = (String) firstRow[1];
+            assertEquals("A1", artistName);
 
-                List<Exhibit> exibits = g1.getExhibitArray();
+            Gallery g1 = (Gallery) firstRow[2];
+            assertEquals("gallery1", g1.getGalleryName());
 
-                assertNotNull(exibits);
-                assertFalse(((ValueHolder) exibits).isFault());
-                assertEquals(2, exibits.size());
+            List<Exhibit> exibits = g1.getExhibitArray();
 
-                Object[] secondRow = (Object[]) objects.get(1);
-                a = (Artist) secondRow[0];
-                assertEquals("A2", a.getArtistName());
+            assertNotNull(exibits);
+            assertFalse(((ValueHolder) exibits).isFault());
+            assertEquals(2, exibits.size());
 
-                paintings = a.getPaintingArray();
+            Object[] secondRow = (Object[]) objects.get(1);
+            a = (Artist) secondRow[0];
+            assertEquals("A2", a.getArtistName());
 
-                assertNotNull(paintings);
-                assertFalse(((ValueHolder) paintings).isFault());
-                assertEquals(1, paintings.size());
+            paintings = a.getPaintingArray();
 
-                expectedPaintingsNames = new ArrayList<String>();
-                expectedPaintingsNames.add("P2");
+            assertNotNull(paintings);
+            assertFalse(((ValueHolder) paintings).isFault());
+            assertEquals(1, paintings.size());
 
-                paintingsIterator = paintings.iterator();
-                while (paintingsIterator.hasNext()) {
-                    Painting p = paintingsIterator.next();
-                    assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                    assertNotNull(p.getPaintingTitle());
-                    assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
-                }
-                artistName = (String) secondRow[1];
-                assertEquals("A2", artistName);
+            expectedPaintingsNames = new ArrayList<>();
+            expectedPaintingsNames.add("P2");
 
-                Gallery g2 = (Gallery) secondRow[2];
-                assertEquals(g1, g2);
+            paintingsIterator = paintings.iterator();
+            while (paintingsIterator.hasNext()) {
+                Painting p = paintingsIterator.next();
+                assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+                assertNotNull(p.getPaintingTitle());
+                assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
             }
+            artistName = (String) secondRow[1];
+            assertEquals("A2", artistName);
+
+            Gallery g2 = (Gallery) secondRow[2];
+            assertEquals(g1, g2);
         });
     }
 
@@ -322,101 +303,96 @@ public class DataContextEJBQLFetchJoinIT extends ServerCase {
         EJBQLQuery query = new EJBQLQuery(ejbql);
 
         final List<?> objects = context.performQuery(query);
-        queryBlocker.runWithQueriesBlocked(new UnitTestClosure() {
-
-            public void execute() {
+        queryBlocker.runWithQueriesBlocked(() -> {
 
-                assertEquals(6, objects.size());
+            assertEquals(6, objects.size());
 
-                Object[] row = (Object[]) objects.get(0);
-                Artist a1 = (Artist) row[0];
-                assertEquals("A1", a1.getArtistName());
+            Object[] row = (Object[]) objects.get(0);
+            Artist a1 = (Artist) row[0];
+            assertEquals("A1", a1.getArtistName());
 
-                List<Painting> paintings = a1.getPaintingArray();
+            List<Painting> paintings = a1.getPaintingArray();
 
-                assertNotNull(paintings);
-                assertFalse(((ValueHolder) paintings).isFault());
-                assertEquals(2, paintings.size());
+            assertNotNull(paintings);
+            assertFalse(((ValueHolder) paintings).isFault());
+            assertEquals(2, paintings.size());
 
-                List<String> expectedPaintingsNames = new ArrayList<String>();
-                expectedPaintingsNames.add("P11");
-                expectedPaintingsNames.add("P12");
+            List<String> expectedPaintingsNames = new ArrayList<>();
+            expectedPaintingsNames.add("P11");
+            expectedPaintingsNames.add("P12");
 
-                Iterator<Painting> paintingsIterator = paintings.iterator();
-                while (paintingsIterator.hasNext()) {
-                    Painting p = paintingsIterator.next();
-                    assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                    assertNotNull(p.getPaintingTitle());
-                    assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
-                }
-                String artistName1 = (String) row[1];
-                assertEquals("A1", artistName1);
+            for (Painting p : paintings) {
+                assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+                assertNotNull(p.getPaintingTitle());
+                assertTrue(expectedPaintingsNames.contains(p.getPaintingTitle()));
+            }
+            String artistName1 = (String) row[1];
+            assertEquals("A1", artistName1);
 
-                Gallery g1 = (Gallery) row[2];
-                assertEquals("gallery1", g1.getGalleryName());
+            Gallery g1 = (Gallery) row[2];
+            assertEquals("gallery1", g1.getGalleryName());
 
-                List<?> exibits = g1.getExhibitArray();
+            List<?> exibits = g1.getExhibitArray();
 
-                assertNotNull(exibits);
-                assertFalse(((ValueHolder) exibits).isFault());
-                assertEquals(2, exibits.size());
+            assertNotNull(exibits);
+            assertFalse(((ValueHolder) exibits).isFault());
+            assertEquals(2, exibits.size());
 
-                row = (Object[]) objects.get(1);
+            row = (Object[]) objects.get(1);
 
-                assertEquals(a1, row[0]);
-                assertEquals(artistName1, row[1]);
+            assertEquals(a1, row[0]);
+            assertEquals(artistName1, row[1]);
 
-                Gallery g2 = (Gallery) row[2];
-                assertEquals("gallery2", g2.getGalleryName());
+            Gallery g2 = (Gallery) row[2];
+            assertEquals("gallery2", g2.getGalleryName());
 
-                exibits = g2.getExhibitArray();
+            exibits = g2.getExhibitArray();
 
-                assertTrue(exibits.isEmpty());
+            assertTrue(exibits.isEmpty());
 
-                row = (Object[]) objects.get(2);
+            row = (Object[]) objects.get(2);
 
-                Artist a2 = (Artist) row[0];
-                assertEquals("A2", a2.getArtistName());
+            Artist a2 = (Artist) row[0];
+            assertEquals("A2", a2.getArtistName());
 
-                paintings = a2.getPaintingArray();
+            paintings = a2.getPaintingArray();
 
-                assertNotNull(paintings);
-                assertEquals(1, paintings.size());
+            assertNotNull(paintings);
+            assertEquals(1, paintings.size());
 
-                Painting p = paintings.get(0);
-                assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
-                assertNotNull(p.getPaintingTitle());
-                assertEquals("P2", p.getPaintingTitle());
+            Painting p = paintings.get(0);
+            assertEquals(PersistenceState.COMMITTED, p.getPersistenceState());
+            assertNotNull(p.getPaintingTitle());
+            assertEquals("P2", p.getPaintingTitle());
 
-                String artistName2 = (String) row[1];
-                assertEquals("A2", artistName2);
-                assertEquals(g1, row[2]);
+            String artistName2 = (String) row[1];
+            assertEquals("A2", artistName2);
+            assertEquals(g1, row[2]);
 
-                row = (Object[]) objects.get(3);
+            row = (Object[]) objects.get(3);
 
-                assertEquals(a2, row[0]);
-                assertEquals(artistName2, row[1]);
-                assertEquals(g2, row[2]);
+            assertEquals(a2, row[0]);
+            assertEquals(artistName2, row[1]);
+            assertEquals(g2, row[2]);
 
-                row = (Object[]) objects.get(4);
+            row = (Object[]) objects.get(4);
 
-                Artist a3 = (Artist) row[0];
-                assertEquals("A3", a3.getArtistName());
+            Artist a3 = (Artist) row[0];
+            assertEquals("A3", a3.getArtistName());
 
-                paintings = a3.getPaintingArray();
+            paintings = a3.getPaintingArray();
 
-                assertTrue(paintings.isEmpty());
+            assertTrue(paintings.isEmpty());
 
-                String artistName3 = (String) row[1];
-                assertEquals("A3", artistName3);
-                assertEquals(g1, row[2]);
+            String artistName3 = (String) row[1];
+            assertEquals("A3", artistName3);
+            assertEquals(g1, row[2]);
 
-                row = (Object[]) objects.get(5);
+            row = (Object[]) objects.get(5);
 
-                assertEquals(a3, row[0]);
-                assertEquals(artistName3, row[1]);
-                assertEquals(g2, row[2]);
-            }
+            assertEquals(a3, row[0]);
+            assertEquals(artistName3, row[1]);
+            assertEquals(g2, row[2]);
         });
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
index 4d7f4b7..fb8f7a5 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java
@@ -111,29 +111,22 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
     @Test
     public void testSelectCompound1() throws Exception {
         createTestDataSet();
-        SelectQuery query = new SelectQuery(CompoundPainting.class);
-        List<?> objects = context.performQuery(query);
+        SelectQuery<CompoundPainting> query = SelectQuery.query(CompoundPainting.class);
+        List<CompoundPainting> objects = query.select(context);
 
         assertNotNull(objects);
         assertEquals(8, objects.size());
-        assertTrue(
-                "CompoundPainting expected, got " + objects.get(0).getClass(),
-                objects.get(0) instanceof CompoundPainting);
+        assertTrue("CompoundPainting expected, got null", objects.get(0) != null);
 
-        for (Iterator<?> i = objects.iterator(); i.hasNext();) {
-            CompoundPainting painting = (CompoundPainting) i.next();
-            Number id = (Number) painting
-                    .getObjectId()
-                    .getIdSnapshot()
-                    .get("PAINTING_ID");
+        for (CompoundPainting painting : objects) {
+            Number id = (Number) painting.getObjectId().getIdSnapshot().get("PAINTING_ID");
             assertEquals(
                     "CompoundPainting.getPaintingTitle(): " + painting.getPaintingTitle(),
                     "painting" + id,
                     painting.getPaintingTitle());
             if (painting.getToPaintingInfo() == null) {
                 assertNull(painting.getTextReview());
-            }
-            else {
+            } else {
                 assertEquals(
                         "CompoundPainting.getTextReview(): " + painting.getTextReview(),
                         "painting review" + id,
@@ -145,8 +138,7 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
                     painting.getArtistName());
             if (painting.getToGallery() == null) {
                 assertNull(painting.getGalleryName());
-            }
-            else {
+            } else {
                 assertEquals(
                         "CompoundPainting.getGalleryName(): " + painting.getGalleryName(),
                         painting.getToGallery().getGalleryName(),
@@ -156,25 +148,21 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
     }
 
     // TODO: andrus 1/5/2007 - CAY-952: SelectQuery uses INNER JOIN for flattened
-    // attributes, while
-    // EJBQLQuery does an OUTER JOIN... which seems like a better idea...
+    // attributes, while EJBQLQuery does an OUTER JOIN... which seems like a better idea...
     // 14/01/2010 now it uses LEFT JOIN
     @Test
     public void testSelectCompound2() throws Exception {
         createTestDataSet();
-        SelectQuery query = new SelectQuery(
+        SelectQuery<CompoundPainting> query = SelectQuery.query(
                 CompoundPainting.class,
                 ExpressionFactory.matchExp("artistName", "artist2"));
-        List<?> objects = context.performQuery(query);
+        List<CompoundPainting> objects = query.select(context);
 
         assertNotNull(objects);
         assertEquals(2, objects.size());
-        assertTrue(
-                "CompoundPainting expected, got " + objects.get(0).getClass(),
-                objects.get(0) instanceof CompoundPainting);
+        assertTrue("CompoundPainting expected, got null", objects.get(0) != null);
 
-        for (Iterator<?> i = objects.iterator(); i.hasNext();) {
-            CompoundPainting painting = (CompoundPainting) i.next();
+        for (CompoundPainting painting : objects) {
             assertEquals(PersistenceState.COMMITTED, painting.getPersistenceState());
 
             assertEquals(
@@ -197,7 +185,7 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
     @Test
     public void testSelectCompoundLongNames() throws Exception {
         createTestDataSet();
-        SelectQuery query = new SelectQuery(CompoundPaintingLongNames.class);
+        SelectQuery<CompoundPaintingLongNames> query = SelectQuery.query(CompoundPaintingLongNames.class);
         // the error was thrown on query execution
         List<?> objects = context.performQuery(query);
         assertNotNull(objects);
@@ -215,9 +203,8 @@ public class DataContextFlattenedAttributesIT extends ServerCase {
         assertTrue(
                 "CompoundPainting expected, got " + objects.get(0).getClass(),
                 objects.get(0) instanceof CompoundPainting);
-        Iterator<?> i = objects.iterator();
-        while (i.hasNext()) {
-            CompoundPainting painting = (CompoundPainting) i.next();
+        for (Object object : objects) {
+            CompoundPainting painting = (CompoundPainting) object;
             assertEquals(PersistenceState.COMMITTED, painting.getPersistenceState());
         }
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextJoinAliasesIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextJoinAliasesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextJoinAliasesIT.java
index d99055c..1de1417 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextJoinAliasesIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextJoinAliasesIT.java
@@ -101,16 +101,14 @@ public class DataContextJoinAliasesIT extends ServerCase {
         Artist picasso = Cayenne.objectForPK(context, Artist.class, 1);
         Artist dali = Cayenne.objectForPK(context, Artist.class, 2);
 
-        SelectQuery query = new SelectQuery(Gallery.class);
-        query.andQualifier(ExpressionFactory.matchAllExp(
-                "|exhibitArray.artistExhibitArray.toArtist",
-                picasso,
-                dali));
+        SelectQuery<Gallery> query = SelectQuery.query(Gallery.class);
+        query.andQualifier(ExpressionFactory.matchAllExp("|exhibitArray.artistExhibitArray.toArtist", picasso, dali));
 
-        List<Gallery> galleries = context.performQuery(query);
+        List<Gallery> galleries = query.select(context);
 
         assertEquals(1, galleries.size());
         assertEquals("G1", galleries.get(0).getGalleryName());
+
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOrderingIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOrderingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOrderingIT.java
index 68506d2..974d641 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOrderingIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOrderingIT.java
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.access;
 
-import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.FunctionExpressionFactory;
@@ -45,7 +44,7 @@ public class DataContextOrderingIT extends ServerCase {
     private DataContext context;
 
     @Test
-    public void testMultipleOrdering() throws Exception {
+    public void testMultipleOrdering() {
 
         Calendar c = Calendar.getInstance();
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOuterJoinsIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOuterJoinsIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOuterJoinsIT.java
index 3842a5f..eb998fb 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOuterJoinsIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextOuterJoinsIT.java
@@ -86,7 +86,7 @@ public class DataContextOuterJoinsIT extends ServerCase {
 		missingToManyQuery.andQualifier(Artist.GROUP_ARRAY.outer().isNull());
 		missingToManyQuery.addOrdering(Artist.ARTIST_NAME.asc());
 
-		List<Artist> artists = context.performQuery(missingToManyQuery);
+		List<Artist> artists = missingToManyQuery.select(context);
 		assertEquals(1, artists.size());
 		assertEquals("BB1", artists.get(0).getArtistName());
 	}
@@ -102,20 +102,20 @@ public class DataContextOuterJoinsIT extends ServerCase {
 		paintingHelper.insert(33001, 33001, "P1");
 		paintingHelper.insert(33002, 33002, "P2");
 
-		SelectQuery missingToManyQuery = new SelectQuery(Artist.class);
+		SelectQuery<Artist> missingToManyQuery = SelectQuery.query(Artist.class);
 		missingToManyQuery.andQualifier(Artist.PAINTING_ARRAY.outer().isNull());
 		missingToManyQuery.addOrdering(Artist.ARTIST_NAME.asc());
 
-		List<Artist> artists = context.performQuery(missingToManyQuery);
+		List<Artist> artists = missingToManyQuery.select(context);
 		assertEquals(2, artists.size());
 		assertEquals("BB1", artists.get(0).getArtistName());
 
-		SelectQuery<Artist> mixedConditionQuery = new SelectQuery<>(Artist.class);
+		SelectQuery<Artist> mixedConditionQuery = SelectQuery.query(Artist.class);
 		mixedConditionQuery.andQualifier(Artist.PAINTING_ARRAY.outer().isNull());
 		mixedConditionQuery.orQualifier(Artist.ARTIST_NAME.eq("AA1"));
 		mixedConditionQuery.addOrdering(Artist.ARTIST_NAME.asc());
 
-		artists = context.performQuery(mixedConditionQuery);
+		artists = mixedConditionQuery.select(context);
 		assertEquals(3, artists.size());
 		assertEquals("AA1", artists.get(0).getArtistName());
 		assertEquals("BB1", artists.get(1).getArtistName());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSelectQuerySplitAliasesIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSelectQuerySplitAliasesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSelectQuerySplitAliasesIT.java
index 46f7a80..adbd1ba 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSelectQuerySplitAliasesIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextSelectQuerySplitAliasesIT.java
@@ -74,12 +74,12 @@ public class DataContextSelectQuerySplitAliasesIT extends ServerCase {
     public void testAliasPathSplits_SinglePath() throws Exception {
         createTwoArtistsTwoPaintingsDataSet();
 
-        SelectQuery query = new SelectQuery(Artist.class);
+        SelectQuery<Artist> query = SelectQuery.query(Artist.class);
         query.andQualifier(ExpressionFactory.matchExp("p.paintingTitle", "X"));
 
         query.aliasPathSplits("paintingArray", "p");
 
-        List<Artist> artists = context.performQuery(query);
+        List<Artist> artists = query.select(context);
         assertEquals(1, artists.size());
         assertEquals("AA", artists.get(0).getArtistName());
     }
@@ -88,13 +88,13 @@ public class DataContextSelectQuerySplitAliasesIT extends ServerCase {
     public void testAliasPathSplits_SplitJoin() throws Exception {
         createTwoArtistsThreePaintingsDataSet();
 
-        SelectQuery query = new SelectQuery(Artist.class);
+        SelectQuery<Artist> query = SelectQuery.query(Artist.class);
         query.andQualifier(ExpressionFactory.matchExp("p1.paintingTitle", "X"));
         query.andQualifier(ExpressionFactory.matchExp("p2.paintingTitle", "Y"));
 
         query.aliasPathSplits("paintingArray", "p1", "p2");
 
-        List<Artist> artists = context.performQuery(query);
+        List<Artist> artists = query.select(context);
         assertEquals(1, artists.size());
         assertEquals("BB", artists.get(0).getArtistName());
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/DeleteObjectIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DeleteObjectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DeleteObjectIT.java
index 68e1944..65f57e4 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DeleteObjectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DeleteObjectIT.java
@@ -24,6 +24,7 @@ import org.apache.cayenne.PersistenceState;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DeleteRule;
 import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
@@ -207,7 +208,7 @@ public class DeleteObjectIT extends ServerCase {
     public void testDeleteHollow() throws Exception {
         createHollowDataSet();
 
-        List<Painting> paintings = context.performQuery(new SelectQuery(Painting.class));
+        List<Painting> paintings = ObjectSelect.query(Painting.class).select(context);
 
         Painting p = paintings.get(0);
         Artist a = p.getToArtist();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/QuotedIdentifiersIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/QuotedIdentifiersIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/QuotedIdentifiersIT.java
index b9174c9..98f8b44 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/QuotedIdentifiersIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/QuotedIdentifiersIT.java
@@ -22,12 +22,14 @@ import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.query.RelationshipQuery;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.query.UpdateBatchQuery;
+import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.testdo.quotemap.QuoteAdress;
 import org.apache.cayenne.testdo.quotemap.Quote_Person;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
@@ -48,9 +50,11 @@ public class QuotedIdentifiersIT extends ServerCase {
     @Inject
     private ObjectContext context;
 
+    @Inject
+    protected DBHelper dbHelper;
+
     @Before
     public void setUp() throws Exception {
-
         QuoteAdress quoteAdress = context.newObject(QuoteAdress.class);
         quoteAdress.setCity("city");
         quoteAdress.setGroup("324");
@@ -63,13 +67,43 @@ public class QuotedIdentifiersIT extends ServerCase {
 
         context.commitChanges();
 
-        SelectQuery q = new SelectQuery(QuoteAdress.class);
-        List objects = context.performQuery(q);
-        assertEquals(1, objects.size());
+        QuoteAdress quoteAdress2 = context.newObject(QuoteAdress.class);
+        quoteAdress2.setCity("city2");
+
+        Quote_Person quote_Person2 = context.newObject(Quote_Person.class);
+        quote_Person2.setSalary(100);
+        quote_Person2.setName("Name");
+        quote_Person2.setGroup("1111");
+        quote_Person2.setDAte(new Date());
+        quote_Person2.setAddress_Rel(quoteAdress2);
+
+        context.commitChanges();
+    }
+
+    @Test
+    public void testDataSetup() {
+        SelectQuery<QuoteAdress> q = SelectQuery.query(QuoteAdress.class);
+        List<QuoteAdress> objects = q.select(context);
+        assertEquals(2, objects.size());
+
+        SelectQuery<Quote_Person> qQuote_Person = SelectQuery.query(Quote_Person.class);
+        List<Quote_Person> objects2 = qQuote_Person.select(context);
+        assertEquals(2, objects2.size());
+    }
+
+    @Test
+    public void testInsert() {
+        QuoteAdress quoteAdress = context.newObject(QuoteAdress.class);
+        quoteAdress.setCity("city");
+        quoteAdress.setGroup("324");
+
+        Quote_Person quote_Person = context.newObject(Quote_Person.class);
+        quote_Person.setSalary(10000);
+        quote_Person.setName("Arcadi");
+        quote_Person.setGroup("107324");
+        quote_Person.setAddress_Rel(quoteAdress);
 
-        SelectQuery qQuote_Person = new SelectQuery(Quote_Person.class);
-        List objects2 = context.performQuery(qQuote_Person);
-        assertEquals(1, objects2.size());
+        context.commitChanges();
 
         QuoteAdress quoteAdress2 = context.newObject(QuoteAdress.class);
         quoteAdress2.setCity("city2");
@@ -82,34 +116,41 @@ public class QuotedIdentifiersIT extends ServerCase {
         quote_Person2.setAddress_Rel(quoteAdress2);
 
         context.commitChanges();
+
+        SelectQuery<QuoteAdress> q = SelectQuery.query(QuoteAdress.class);
+        List<QuoteAdress> objects = q.select(context);
+        assertEquals(4, objects.size());
+
+        SelectQuery<Quote_Person> qQuote_Person = SelectQuery.query(Quote_Person.class);
+        List<Quote_Person> objects2 = qQuote_Person.select(context);
+        assertEquals(4, objects2.size());
     }
 
     @Test
-    public void testPrefetchQuote() throws Exception {
+    public void testPrefetchQuote() {
         DbEntity entity = context.getEntityResolver().getObjEntity(QuoteAdress.class).getDbEntity();
-        List idAttributes = Collections.singletonList(entity.getAttribute("City"));
-        List updatedAttributes = Collections.singletonList(entity.getAttribute("City"));
+        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("City"));
+        List<DbAttribute> updatedAttributes = Collections.singletonList(entity.getAttribute("City"));
 
-        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
-                Collections.<String> emptySet(), 1);
+        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, Collections.emptySet(), 1);
 
         List objects3 = context.performQuery(updateQuery);
         assertEquals(0, objects3.size());
 
-        SelectQuery qQuote_Person2 = new SelectQuery(Quote_Person.class);
-        List objects4 = context.performQuery(qQuote_Person2);
+        SelectQuery<Quote_Person> qQuote_Person2 = SelectQuery.query(Quote_Person.class);
+        List<Quote_Person> objects4 = qQuote_Person2.select(context);
         assertEquals(2, objects4.size());
 
-        SelectQuery qQuote_Person3 = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("salary", 100));
-        List objects5 = context.performQuery(qQuote_Person3);
+        SelectQuery<Quote_Person> qQuote_Person3 = SelectQuery.query(Quote_Person.class, ExpressionFactory.matchExp("salary", 100));
+        List<Quote_Person> objects5 = qQuote_Person3.select(context);
         assertEquals(1, objects5.size());
 
-        SelectQuery qQuote_Person4 = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("group", "107324"));
-        List objects6 = context.performQuery(qQuote_Person4);
+        SelectQuery<Quote_Person> qQuote_Person4 = SelectQuery.query(Quote_Person.class, ExpressionFactory.matchExp("group", "107324"));
+        List<Quote_Person> objects6 = qQuote_Person4.select(context);
         assertEquals(1, objects6.size());
 
-        SelectQuery quoteAdress1 = new SelectQuery(QuoteAdress.class, ExpressionFactory.matchExp("group", "324"));
-        List objects7 = context.performQuery(quoteAdress1);
+        SelectQuery<QuoteAdress> quoteAdress1 = SelectQuery.query(QuoteAdress.class, ExpressionFactory.matchExp("group", "324"));
+        List<QuoteAdress> objects7 = quoteAdress1.select(context);
         assertEquals(1, objects7.size());
 
         ObjectIdQuery queryObjectId = new ObjectIdQuery(new ObjectId("QuoteAdress", QuoteAdress.GROUP.getName(), "324"));
@@ -121,8 +162,8 @@ public class QuotedIdentifiersIT extends ServerCase {
         List objects9 = context.performQuery(queryObjectId2);
         assertEquals(1, objects9.size());
 
-        SelectQuery person2Query = new SelectQuery(Quote_Person.class, ExpressionFactory.matchExp("name", "Name"));
-        Quote_Person quote_Person2 = (Quote_Person) context.performQuery(person2Query).get(0);
+        SelectQuery<Quote_Person> person2Query = SelectQuery.query(Quote_Person.class, ExpressionFactory.matchExp("name", "Name"));
+        Quote_Person quote_Person2 = person2Query.select(context).get(0);
 
         RelationshipQuery relationshipQuery = new RelationshipQuery(quote_Person2.getObjectId(), "address_Rel");
         List objects10 = context.performQuery(relationshipQuery);
@@ -130,7 +171,7 @@ public class QuotedIdentifiersIT extends ServerCase {
     }
 
     @Test
-    public void testQuotedEJBQLQuery() throws Exception {
+    public void testQuotedEJBQLQuery() {
         String ejbql = "select a from QuoteAdress a where a.group = '324'";
         EJBQLQuery queryEJBQL = new EJBQLQuery(ejbql);
         List objects11 = context.performQuery(queryEJBQL);
@@ -138,7 +179,7 @@ public class QuotedIdentifiersIT extends ServerCase {
     }
 
     @Test
-    public void testQuotedEJBQLQueryWithJoin() throws Exception {
+    public void testQuotedEJBQLQueryWithJoin() {
         String ejbql = "select p from Quote_Person p join p.address_Rel a where p.name = 'Arcadi'";
         EJBQLQuery queryEJBQL = new EJBQLQuery(ejbql);
         List resultList = context.performQuery(queryEJBQL);
@@ -146,9 +187,10 @@ public class QuotedIdentifiersIT extends ServerCase {
     }
 
     @Test
-    public void testQuotedEJBQLQueryWithOrderBy() throws Exception {
+    public void testQuotedEJBQLQueryWithOrderBy() {
         EJBQLQuery query = new EJBQLQuery("select p from Quote_Person p order by p.name");
 
+        @SuppressWarnings("unchecked")
         List<Quote_Person> resultList = (List<Quote_Person>) context.performQuery(query);
 
         assertEquals(2, resultList.size());
@@ -157,7 +199,7 @@ public class QuotedIdentifiersIT extends ServerCase {
     }
 
     @Test
-    public void testQuotedEJBQLCountQuery() throws Exception {
+    public void testQuotedEJBQLCountQuery() {
         EJBQLQuery query = new EJBQLQuery("select count(p) from Quote_Person p");
         assertEquals(Collections.singletonList(2L), context.performQuery(query));
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
index 4dabb68..198a28f 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/ReturnTypesMappingIT.java
@@ -764,7 +764,7 @@ public class ReturnTypesMappingIT extends ServerCase {
 
         Calendar cal = Calendar.getInstance();
         cal.clear();
-        cal.set(2003, 1, 1, 1, 20, 30);
+        cal.set(2003, Calendar.FEBRUARY, 1, 1, 20, 30);
         Date timeValue = new Time(cal.getTime().getTime());
         test.setTimeColumn(timeValue);
         context.commitChanges();
@@ -783,13 +783,13 @@ public class ReturnTypesMappingIT extends ServerCase {
 
         Calendar cal = Calendar.getInstance();
         cal.clear();
-        cal.set(2003, 1, 1, 1, 20, 30);
+        cal.set(2003, Calendar.FEBRUARY, 1, 1, 20, 30);
         Date timeValue = new Time(cal.getTime().getTime());
         test.setTimeColumn(timeValue);
         context.commitChanges();
 
-        SelectQuery q = new SelectQuery(ReturnTypesMap1.class);
-        ReturnTypesMap1 testRead = (ReturnTypesMap1) context.performQuery(q).get(0);
+        SelectQuery<ReturnTypesMap1> q = new SelectQuery<>(ReturnTypesMap1.class);
+        ReturnTypesMap1 testRead = q.selectOne(context);
         Date columnValue = testRead.getTimeColumn();
         assertNotNull(columnValue);
         assertEquals(Date.class, columnValue.getClass());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/BaseHandlerTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/BaseHandlerTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/BaseHandlerTest.java
index 4cefbff..f73f11a 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/BaseHandlerTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/BaseHandlerTest.java
@@ -35,7 +35,7 @@ import org.xml.sax.helpers.DefaultHandler;
 public abstract class BaseHandlerTest {
 
     protected void parse(String tag, HandlerFactory factory) throws Exception {
-        try(InputStream in = DbKeyGeneratorHandlerTest.class.getResource(getClass().getSimpleName() + ".xml").openStream()) {
+        try(InputStream in = BaseHandlerTest.class.getResource(getClass().getSimpleName() + ".xml").openStream()) {
             XMLReader parser = Util.createXmlReader();
             DefaultHandler handler = new TestRootHandler(parser, tag, factory);
             parser.setContentHandler(handler);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/dba/DefaultQuotingStrategyTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/DefaultQuotingStrategyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/DefaultQuotingStrategyTest.java
index 27d725e..e5b5bcb 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/dba/DefaultQuotingStrategyTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/DefaultQuotingStrategyTest.java
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertEquals;
 public class DefaultQuotingStrategyTest {
 
     @Test
-    public void testQuotedIdentifer() {
+    public void testQuotedIdentifier() {
 
         DataMap dm = new DataMap();
         dm.setQuotingSQLIdentifiers(true);
@@ -41,7 +41,7 @@ public class DefaultQuotingStrategyTest {
     }
 
     @Test
-    public void testUnQuotedIdentifer() {
+    public void testUnQuotedIdentifier() {
 
         DataMap dm = new DataMap();
         dm.setQuotingSQLIdentifiers(false);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryClobIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryClobIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryClobIT.java
index 232378f..3ebbe1c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryClobIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryClobIT.java
@@ -81,13 +81,13 @@ public class SelectQueryClobIT extends ServerCase {
 
             // see CAY-1539... CLOB column causes suppression of DISTINCT in
             // SQL, and hence the offset processing is done in memory
-            SelectQuery<ClobTestEntity> query = new SelectQuery<ClobTestEntity>(ClobTestEntity.class);
+            SelectQuery<ClobTestEntity> query = new SelectQuery<>(ClobTestEntity.class);
             query.addOrdering("db:" + ClobTestEntity.CLOB_TEST_ID_PK_COLUMN, SortOrder.ASCENDING);
             query.setFetchLimit(1);
             query.setFetchOffset(1);
             query.setDistinct(true);
 
-            List<ClobTestEntity> objects = context.performQuery(query);
+            List<ClobTestEntity> objects = query.select(context);
             assertEquals(1, objects.size());
             assertEquals(2, Cayenne.intPKForObject(objects.get(0)));
         }
@@ -97,7 +97,7 @@ public class SelectQueryClobIT extends ServerCase {
     public void testSelectEqualsClob() throws Exception {
         if (accessStackAdapter.supportsLobComparisons()) {
             createClobDataSet();
-            SelectQuery<ClobTestEntity> query = new SelectQuery<ClobTestEntity>(ClobTestEntity.class);
+            SelectQuery<ClobTestEntity> query = new SelectQuery<>(ClobTestEntity.class);
             Expression qual = ExpressionFactory.matchExp("clobCol", "clob1");
             query.setQualifier(qual);
             List<?> objects = context.performQuery(query);
@@ -109,7 +109,7 @@ public class SelectQueryClobIT extends ServerCase {
     public void testSelectNotEqualsClob() throws Exception {
         if (accessStackAdapter.supportsLobComparisons()) {
             createClobDataSet();
-            SelectQuery query = new SelectQuery(ClobTestEntity.class);
+            SelectQuery query = new SelectQuery<>(ClobTestEntity.class);
             Expression qual = ExpressionFactory.noMatchExp("clobCol", "clob1");
             query.setQualifier(qual);
             List<?> objects = context.performQuery(query);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0a83ab70/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
index 59b8a56..1bd6d1b 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryIT.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.ResultSet;
 import java.sql.Types;
 import java.util.Arrays;
 import java.util.Collections;
@@ -127,7 +128,7 @@ public class SelectQueryIT extends ServerCase {
 
 		createArtistsDataSet();
 
-		int totalRows = new SelectQuery<>(Artist.class).select(context).size();
+		long totalRows = ObjectSelect.query(Artist.class).selectCount(context);
 
 		SelectQuery<Artist> query = new SelectQuery<>(Artist.class);
 		query.addOrdering("db:" + Artist.ARTIST_ID_PK_COLUMN, SortOrder.ASCENDING);
@@ -319,8 +320,7 @@ public class SelectQueryIT extends ServerCase {
 
 		createArtistsWildcardDataSet();
 
-		// CAY-1978 - combining LIKE..ESCAPE with another clause generated bad
-		// SQL
+		// CAY-1978 - combining LIKE..ESCAPE with another clause generated bad SQL
 		SelectQuery<Artist> query = new SelectQuery<>(Artist.class);
 		query.andQualifier(ExpressionFactory.likeIgnoreCaseExp("artistName", "=_%", '='));
 		query.andQualifier(Artist.ARTIST_NAME.eq("_X"));
@@ -506,7 +506,7 @@ public class SelectQueryIT extends ServerCase {
 		Expression qual = ExpressionFactory.matchExp("artistName", "artist1");
 		query.setQualifier(qual);
 
-		Artist artist = (Artist) query.selectOne(context);
+		Artist artist = query.selectOne(context);
 		assertEquals("artist1", artist.getArtistName());
 	}
 


[4/5] cayenne git commit: Cleanup tests

Posted by nt...@apache.org.
Cleanup tests


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

Branch: refs/heads/master
Commit: d7acbe82926ca4b01aed2b331fcedfb20817c116
Parents: 06ab9ed
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jul 31 15:06:11 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jul 31 15:06:11 2018 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/d7acbe82/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java
----------------------------------------------------------------------
diff --git a/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java b/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java
index ec080c0..319c75f 100644
--- a/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java
+++ b/build-tools/cayenne-test-utilities/src/main/java/org/apache/cayenne/test/jdbc/DBHelper.java
@@ -141,13 +141,13 @@ public class DBHelper {
 		}
 		sql.append(")");
 
-		try (Connection c = getConnection();) {
+		try (Connection c = getConnection()) {
 
 			String sqlString = sql.toString();
 			UtilityLogger.log(sqlString);
 
 			ParameterMetaData parameters = null;
-			try (PreparedStatement st = c.prepareStatement(sqlString);) {
+			try (PreparedStatement st = c.prepareStatement(sqlString)) {
 				for (int i = 0; i < values.length; i++) {
 
 					if (values[i] == null) {


[5/5] cayenne git commit: Cleanup code

Posted by nt...@apache.org.
Cleanup code


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

Branch: refs/heads/master
Commit: e616dc140150e016c486cb671998e35e632ab606
Parents: d7acbe8
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jul 31 15:08:02 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jul 31 15:08:02 2018 +0300

----------------------------------------------------------------------
 .../cayenne/access/DataDomainQueryAction.java   |   6 +-
 .../access/PrefetchProcessorJointNode.java      |   3 +-
 .../cayenne/access/jdbc/SelectAction.java       |   5 +-
 .../translator/ejbql/EJBQLFromTranslator.java   |  10 +-
 .../apache/cayenne/ejbql/parser/Compiler.java   |  23 ++--
 .../java/org/apache/cayenne/map/DbEntity.java   |  24 +---
 .../java/org/apache/cayenne/map/ObjEntity.java  |   7 +-
 .../cayenne/map/PathComponentIterator.java      | 122 +++++++++----------
 8 files changed, 83 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
index 13b1961..57458a9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
@@ -743,9 +743,9 @@ class DataDomainQueryAction implements QueryRouter, OperationObserver {
             // with resolved objects
             List<PrefetchProcessorNode> segmentNodes = new ArrayList<>(width);
             for (int i = 0; i < width; i++) {
-
-                if (rsMapping.get(i) instanceof EntityResultSegment) {
-                    EntityResultSegment entitySegment = (EntityResultSegment) rsMapping.get(i);
+                Object mapping = rsMapping.get(i);
+                if (mapping instanceof EntityResultSegment) {
+                    EntityResultSegment entitySegment = (EntityResultSegment) mapping;
                     PrefetchProcessorNode nextResult = toResultsTree(entitySegment.getClassDescriptor(),
                             metadata.getPrefetchTree(), mainRows, i);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
index 784453a..dc7003a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java
@@ -171,8 +171,7 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode {
 
             // make sure we do not include "db:" prefix
             prefix = translated.getOperand(0) + ".";
-        }
-        else {
+        } else {
             prefix = "";
         }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
index 0cb1ea7..51f373b 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SelectAction.java
@@ -168,8 +168,9 @@ public class SelectAction extends BaseSQLAction {
 		// number of objects returned from Cayenne.
 
 		int fetchLimit = query.getFetchLimit();
-		int offset = translator.isSuppressingDistinct() ? query.getFetchOffset() : getInMemoryOffset(query
-				.getFetchOffset());
+		int offset = translator.isSuppressingDistinct()
+				? query.getFetchOffset()
+				: getInMemoryOffset(query.getFetchOffset());
 
 		if (fetchLimit > 0 || offset > 0) {
 			return new LimitResultIterator<>(iterator, offset, fetchLimit);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
index e1f3740..f1fc202 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/ejbql/EJBQLFromTranslator.java
@@ -21,9 +21,7 @@ package org.apache.cayenne.access.translator.ejbql;
 import org.apache.cayenne.ejbql.EJBQLBaseVisitor;
 import org.apache.cayenne.ejbql.EJBQLExpression;
 import org.apache.cayenne.ejbql.parser.EJBQLFromItem;
-import org.apache.cayenne.ejbql.parser.EJBQLInnerFetchJoin;
 import org.apache.cayenne.ejbql.parser.EJBQLJoin;
-import org.apache.cayenne.ejbql.parser.EJBQLOuterFetchJoin;
 
 /**
  * @since 3.0
@@ -71,10 +69,10 @@ public class EJBQLFromTranslator extends EJBQLBaseVisitor {
         joinAppender.appendInnerJoin(
                 null,
                 new EJBQLTableId(join.getLeftHandSideId()),
-                new EJBQLTableId(((EJBQLInnerFetchJoin) join).getRightHandSideId()));
+                new EJBQLTableId(join.getRightHandSideId()));
 
         context.markCurrentPosition(EJBQLJoinAppender
-                .makeJoinTailMarker(((EJBQLInnerFetchJoin) join).getRightHandSideId()));
+                .makeJoinTailMarker(join.getRightHandSideId()));
         return false;
     }
 
@@ -95,10 +93,10 @@ public class EJBQLFromTranslator extends EJBQLBaseVisitor {
         joinAppender.appendOuterJoin(
                 null,
                 new EJBQLTableId(join.getLeftHandSideId()),
-                new EJBQLTableId(((EJBQLOuterFetchJoin) join).getRightHandSideId()));
+                new EJBQLTableId(join.getRightHandSideId()));
 
         context.markCurrentPosition(EJBQLJoinAppender
-                .makeJoinTailMarker(((EJBQLOuterFetchJoin) join).getRightHandSideId()));
+                .makeJoinTailMarker(join.getRightHandSideId()));
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
index 3908ff3..47eef55 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/ejbql/parser/Compiler.java
@@ -233,26 +233,21 @@ class Compiler {
         return compiled;
     }
 
-    private EntityResult compileEntityResultWithPrefetch(
-            EntityResult compiledResult,
-            EJBQLExpression prefetchExpression) {
-        final EntityResult result = compiledResult;
+    private EntityResult compileEntityResultWithPrefetch(EntityResult compiledResult, EJBQLExpression prefetchExpression) {
         String id = prefetchExpression.getText().toLowerCase();
         ClassDescriptor descriptor = descriptorsById.get(id);
         if (descriptor == null) {
             descriptor = descriptorsById.get(prefetchExpression.getText());
         }
-        final String prefix = prefetchExpression.getText().substring(
-                prefetchExpression.getText().indexOf(".") + 1);
-
-        final Set<String> visited = new HashSet<String>();
+        String prefix = prefetchExpression.getText().substring(prefetchExpression.getText().indexOf(".") + 1);
+        Set<String> visited = new HashSet<>();
 
         PropertyVisitor visitor = new PropertyVisitor() {
 
             public boolean visitAttribute(AttributeProperty property) {
                 ObjAttribute oa = property.getAttribute();
                 if (visited.add(oa.getDbAttributePath())) {
-                    result.addObjectField(oa.getEntity().getName(), "fetch."
+                    compiledResult.addObjectField(oa.getEntity().getName(), "fetch."
                             + prefix
                             + "."
                             + oa.getName(), prefix + "." + oa.getDbAttributeName());
@@ -271,7 +266,7 @@ class Compiler {
                 for (DbJoin join : dbRel.getJoins()) {
                     DbAttribute src = join.getSource();
                     if (src.isForeignKey() && visited.add(src.getName())) {
-                        result.addDbField("fetch." + prefix + "." + src.getName(), prefix
+                        compiledResult.addDbField("fetch." + prefix + "." + src.getName(), prefix
                                 + "."
                                 + src.getName());
                     }
@@ -286,7 +281,7 @@ class Compiler {
         // append id columns ... (some may have been appended already via relationships)
         for (String pkName : descriptor.getEntity().getPrimaryKeyNames()) {
             if (visited.add(pkName)) {
-                result
+                compiledResult
                         .addDbField("fetch." + prefix + "." + pkName, prefix
                                 + "."
                                 + pkName);
@@ -297,13 +292,13 @@ class Compiler {
         for (ObjAttribute column : descriptor.getDiscriminatorColumns()) {
 
             if (visited.add(column.getName())) {
-                result.addDbField(
+                compiledResult.addDbField(
                         "fetch." + prefix + "." + column.getDbAttributePath(),
                         prefix + "." + column.getDbAttributePath());
             }
         }
 
-        return result;
+        return compiledResult;
     }
 
     private EntityResult compileEntityResult(EJBQLExpression expression, int position) {
@@ -321,7 +316,7 @@ class Compiler {
             0
         };
 
-        final Set<String> visited = new HashSet<String>();
+        final Set<String> visited = new HashSet<>();
 
         PropertyVisitor visitor = new PropertyVisitor() {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java b/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
index 51fefa4..0626655 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/DbEntity.java
@@ -34,6 +34,7 @@ import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.map.event.MapEvent;
 import org.apache.cayenne.map.event.RelationshipEvent;
 import org.apache.cayenne.util.CayenneMapEntry;
+import org.apache.cayenne.util.Util;
 import org.apache.cayenne.util.XMLEncoder;
 
 import java.util.ArrayList;
@@ -669,7 +670,7 @@ public class DbEntity extends Entity implements ConfigurationNode, DbEntityListe
         }
 
         private PathComponentIterator createPathIterator(String path) {
-            return new PathComponentIterator(DbEntity.this, path, new HashMap<>());
+            return new PathComponentIterator(DbEntity.this, path, Collections.emptyMap());
             // TODO: do we need aliases here?
         }
 
@@ -713,7 +714,7 @@ public class DbEntity extends Entity implements ConfigurationNode, DbEntityListe
                     appendPath(finalPath, component);
                 }
 
-                return convertToPath(finalPath);
+                return Util.join(finalPath, Entity.PATH_SEPARATOR);
             }
             // case (1)
             if (path.equals(relationshipPath)) {
@@ -736,7 +737,7 @@ public class DbEntity extends Entity implements ConfigurationNode, DbEntityListe
                     appendPath(finalPath, lastDBR);
                 }
 
-                return convertToPath(finalPath);
+                return Util.join(finalPath, Entity.PATH_SEPARATOR);
             }
 
             // case (2)
@@ -751,7 +752,6 @@ public class DbEntity extends Entity implements ConfigurationNode, DbEntityListe
 
             // for inserts from the both ends use LinkedList
             LinkedList<String> finalPath = new LinkedList<>();
-
             while (relationshipIt.hasNext() && pathIt.hasNext()) {
                 // relationship path components must be DbRelationships
                 DbRelationship nextDBR = (DbRelationship) relationshipIt.next();
@@ -783,21 +783,7 @@ public class DbEntity extends Entity implements ConfigurationNode, DbEntityListe
                 appendPath(finalPath, component);
             }
 
-            return convertToPath(finalPath);
-        }
-
-        private String convertToPath(List<String> path) {
-            StringBuilder converted = new StringBuilder();
-            int len = path.size();
-            for (int i = 0; i < len; i++) {
-                if (i > 0) {
-                    converted.append(Entity.PATH_SEPARATOR);
-                }
-
-                converted.append(path.get(i));
-            }
-
-            return converted.toString();
+            return Util.join(finalPath, Entity.PATH_SEPARATOR);
         }
 
         private void prependReversedPath(LinkedList<String> finalPath, DbRelationship relationship) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
index 02eb43e..74e793d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
@@ -1010,7 +1010,7 @@ public class ObjEntity extends Entity implements ObjEntityListener, Configuratio
     }
 
     private PathComponentIterator createPathIterator(String path) {
-        return new PathComponentIterator(ObjEntity.this, path, new HashMap<String, String>());
+        return new PathComponentIterator(ObjEntity.this, path, Collections.emptyMap());
         // TODO: do we need aliases here?
     }
 
@@ -1077,11 +1077,8 @@ public class ObjEntity extends Entity implements ObjEntityListener, Configuratio
             }
 
             // convert obj_path to db_path
-
             String converted = toDbPath(createPathIterator((String) expression.getOperand(0)));
-            Expression exp = ExpressionFactory.expressionOfType(Expression.DB_PATH);
-            exp.setOperand(0, converted);
-            return exp;
+            return ExpressionFactory.dbPathExp(converted);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e616dc14/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java b/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
index e631156..a23a281 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/PathComponentIterator.java
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.StringTokenizer;
 
 /**
@@ -32,16 +33,17 @@ import java.util.StringTokenizer;
  */
 class PathComponentIterator implements Iterator<PathComponent<Attribute, Relationship>> {
 
-    private StringTokenizer toks;
+    private final StringTokenizer toks;
+    private final String path;
+    private final Map<String, String> aliasMap;
+
     private Entity currentEntity;
-    private String path;
-    private Map<String, String> aliasMap;
 
     PathComponentIterator(Entity root, String path, Map<String, String> aliasMap) {
-        currentEntity = root;
-        toks = new StringTokenizer(path, Entity.PATH_SEPARATOR);
-        this.path = path;
-        this.aliasMap = aliasMap;
+        this.currentEntity = Objects.requireNonNull(root);
+        this.path = Objects.requireNonNull(path);
+        this.aliasMap = Objects.requireNonNull(aliasMap);
+        this.toks = new StringTokenizer(path, Entity.PATH_SEPARATOR);
     }
 
     public boolean hasNext() {
@@ -56,8 +58,7 @@ class PathComponentIterator implements Iterator<PathComponent<Attribute, Relatio
         // we only support LEFT JOINS for now...
         if (pathComp.endsWith(Entity.OUTER_JOIN_INDICATOR)) {
             relationshipJoinType = JoinType.LEFT_OUTER;
-            pathComp = pathComp.substring(0, pathComp.length()
-                    - Entity.OUTER_JOIN_INDICATOR.length());
+            pathComp = pathComp.substring(0, pathComp.length() - Entity.OUTER_JOIN_INDICATOR.length());
         }
 
         // see if this is an attribute
@@ -66,79 +67,68 @@ class PathComponentIterator implements Iterator<PathComponent<Attribute, Relatio
             // do a sanity check...
             if (toks.hasMoreTokens()) {
                 throw new ExpressionException(
-                        "Attribute must be the last component of the path: '"
-                                + pathComp
-                                + "'.",
-                        path,
-                        null);
+                        "Attribute must be the last component of the path: '" + pathComp + "'.", path, null);
             }
 
-            return new AttributePathComponent<Attribute, Relationship>(attr);
+            return new AttributePathComponent<>(attr);
         }
 
         Relationship rel = currentEntity.getRelationship(pathComp);
         if (rel != null) {
             currentEntity = rel.getTargetEntity();
-            return new RelationshipPathComponent<Attribute, Relationship>(
-                    rel,
-                    relationshipJoinType,
-                    !hasNext());
+            return new RelationshipPathComponent<>(rel, relationshipJoinType, !hasNext());
+        }
+
+        PathComponent<Attribute, Relationship> aliasedPathComponent = getAliasedPathComponent(pathComp);
+        if (aliasedPathComponent != null) {
+            return aliasedPathComponent;
+        }
+
+        throw invalidPathException("Can't resolve path component", pathComp);
+    }
+
+    private PathComponent<Attribute, Relationship> getAliasedPathComponent(String pathComp) {
+        String aliasedPath = aliasMap.get(pathComp);
+        if(aliasedPath == null) {
+            return null;
         }
 
-        String aliasedPath = (aliasMap != null) ? aliasMap.get(pathComp) : null;
-        if (aliasedPath != null) {
-
-            // a few fairly arbitrary assumptions.... if we find that they restrict valid
-            // and useful cases, we can change this behavior:
-            // 
-            // 1. No nested aliases. Aliased path must contain only unaliased component
-            // names.
-            // 2. Subpath must be relationship-only. Aliasing attributes doesn't seem
-            // useful, so we don't handle this case for simplicity...
-
-            // fully resolve subpath here... since we need to know the target entity of
-            // the subpath, we have to fully traverse it, hence instead of lazy iterator
-            // we might as well reuse obtained information in the AliasPathComponent
-
-            Iterator<PathComponent<Attribute, Relationship>> subpathIt = new PathComponentIterator(
-                    currentEntity,
-                    aliasedPath,
-                    Collections.<String, String>emptyMap());
-
-            Collection<PathComponent<Attribute, Relationship>> parsedSubpath = new ArrayList<>(4);
-
-            while (subpathIt.hasNext()) {
-                PathComponent<Attribute, Relationship> subpathComponent = subpathIt.next();
-
-                Relationship subpathRelationship = subpathComponent.getRelationship();
-                if (subpathRelationship == null) {
-                    throw invalidPathException(
-                            "Expected a relationship in the aliased subpath. Alias ["
-                                    + pathComp
-                                    + "]",
-                            subpathComponent.getName());
-                }
-
-                currentEntity = subpathRelationship.getTargetEntity();
-                parsedSubpath.add(subpathComponent);
+        // a few fairly arbitrary assumptions.... if we find that they restrict valid
+        // and useful cases, we can change this behavior:
+        //
+        // 1. No nested aliases. Aliased path must contain only unaliased component names.
+        // 2. Subpath must be relationship-only. Aliasing attributes doesn't seem
+        // useful, so we don't handle this case for simplicity...
+
+        // fully resolve subpath here... since we need to know the target entity of
+        // the subpath, we have to fully traverse it, hence instead of lazy iterator
+        // we might as well reuse obtained information in the AliasPathComponent
+
+        Iterator<PathComponent<Attribute, Relationship>> subpathIt =
+                new PathComponentIterator(currentEntity, aliasedPath, Collections.emptyMap());
+
+        Collection<PathComponent<Attribute, Relationship>> parsedSubpath = new ArrayList<>(4);
+
+        while (subpathIt.hasNext()) {
+            PathComponent<Attribute, Relationship> subpathComponent = subpathIt.next();
+
+            Relationship subpathRelationship = subpathComponent.getRelationship();
+            if (subpathRelationship == null) {
+                throw invalidPathException(
+                        "Expected a relationship in the aliased subpath. Alias [" + pathComp + "]",
+                        subpathComponent.getName());
             }
 
-            return new AliasPathComponent<>(pathComp, parsedSubpath, !hasNext());
+            currentEntity = subpathRelationship.getTargetEntity();
+            parsedSubpath.add(subpathComponent);
         }
 
-        throw invalidPathException("Can't resolve path component", pathComp);
+        return new AliasPathComponent<>(pathComp, parsedSubpath, !hasNext());
     }
 
     private ExpressionException invalidPathException(String message, String pathComponent) {
-        StringBuilder buffer = new StringBuilder();
-        buffer
-                .append(message)
-                .append(": [")
-                .append(currentEntity.getName())
-                .append('.')
-                .append(pathComponent)
-                .append("].");
-        return new ExpressionException(buffer.toString(), path, null);
+        String buffer = message + ": [" + currentEntity.getName() + '.' + pathComponent + "].";
+        return new ExpressionException(buffer, path, null);
     }
 
     public void remove() {


[3/5] cayenne git commit: Update Firebird driver version

Posted by nt...@apache.org.
Update Firebird driver version


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

Branch: refs/heads/master
Commit: 06ab9ed58ee30ad2b89684aa7794e2e391f5f331
Parents: 0a83ab7
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Jul 31 14:55:26 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Jul 31 14:55:26 2018 +0300

----------------------------------------------------------------------
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/06ab9ed5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2c469fe..40cda97 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1240,8 +1240,8 @@
 			<dependencies>
 				<dependency>
 					<groupId>org.firebirdsql.jdbc</groupId>
-					<artifactId>jaybird-jdk17</artifactId>
-					<version>2.2.12</version>
+					<artifactId>jaybird-jdk18</artifactId>
+					<version>3.0.3</version>
 					<scope>test</scope>
 				</dependency>
 			</dependencies>