Merge remote-tracking branch 'upstream/master' into refactor-tests

Conflicts:
        cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java


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

Branch: refs/heads/CAY-1946_1
Commit: 4207ebea2e6510ffeb1cb123e87ecad35ea9239e
Parents: 368b4ac a0f941a
Author: Savva Kolbechev <s.kolbac...@gmail.com>
Authored: Mon Nov 17 17:12:58 2014 +0300
Committer: Savva Kolbechev <s.kolbac...@gmail.com>
Committed: Mon Nov 17 17:12:58 2014 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/exp/Property.java   |  19 +-
 .../apache/cayenne/query/BaseQueryMetadata.java |   6 +-
 .../org/apache/cayenne/query/ObjectSelect.java  | 668 ++++++++++++++++++
 .../java/org/apache/cayenne/query/Ordering.java | 696 ++++++++++---------
 .../apache/cayenne/query/PrefetchTreeNode.java  |  15 +
 .../org/apache/cayenne/query/SQLSelect.java     |  31 +-
 .../org/apache/cayenne/query/SelectQuery.java   |  13 +-
 .../cayenne/query/SelectQueryMetadata.java      | 261 +++----
 .../cayenne/remote/IncrementalSelectQuery.java  |   5 +-
 .../apache/cayenne/query/ObjectSelectTest.java  | 482 +++++++++++++
 .../cayenne/query/ObjectSelect_CompileIT.java   | 169 +++++
 .../cayenne/query/ObjectSelect_RunIT.java       |  86 +++
 .../org/apache/cayenne/query/SQLSelectTest.java |  91 +++
 .../org/apache/cayenne/query/SelectByIdIT.java  |  39 +-
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |   2 +
 15 files changed, 2069 insertions(+), 514 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/4207ebea/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java
----------------------------------------------------------------------
diff --cc 
cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java
index 0000000,cd69200..e49d38b
mode 000000,100644..100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelectTest.java
@@@ -1,0 -1,482 +1,482 @@@
+ /*****************************************************************
+  *   Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *    http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  ****************************************************************/
+ package org.apache.cayenne.query;
+ 
++import org.apache.cayenne.DataRow;
++import org.apache.cayenne.exp.Expression;
++import org.apache.cayenne.exp.ExpressionFactory;
++import org.apache.cayenne.testdo.testmap.Artist;
++import org.junit.Test;
++
++import java.util.Arrays;
++import java.util.Collection;
++import java.util.Collections;
++
+ import static org.junit.Assert.assertArrayEquals;
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertFalse;
+ import static org.junit.Assert.assertNotNull;
+ import static org.junit.Assert.assertNotSame;
+ import static org.junit.Assert.assertNull;
+ import static org.junit.Assert.assertSame;
+ import static org.junit.Assert.assertTrue;
+ 
 -import java.util.Arrays;
 -import java.util.Collection;
 -import java.util.Collections;
 -
 -import org.apache.cayenne.DataRow;
 -import org.apache.cayenne.exp.Expression;
 -import org.apache.cayenne.exp.ExpressionFactory;
 -import org.apache.cayenne.testdo.testmap.Artist;
 -import org.junit.Test;
 -
+ public class ObjectSelectTest {
+ 
+       @Test
+       public void testDataRowQuery() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+               assertNotNull(q);
+               assertTrue(q.isFetchingDataRows());
+ 
+               assertEquals(Artist.class, q.getEntityType());
+               assertNull(q.getEntityName());
+               assertNull(q.getDbEntityName());
+       }
+ 
+       @Test
+       public void testQuery_RootType() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+               assertNotNull(q);
+               assertNull(q.getExp());
+               assertFalse(q.isFetchingDataRows());
+ 
+               assertEquals(Artist.class, q.getEntityType());
+               assertNull(q.getEntityName());
+               assertNull(q.getDbEntityName());
+       }
+ 
+       @Test
+       public void testQuery_RootType_WithQualifier() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class, 
ExpressionFactory.matchExp("a", "A"));
+               assertNotNull(q);
+               assertEquals("a = \"A\"", q.getExp().toString());
+               assertFalse(q.isFetchingDataRows());
+ 
+               assertEquals(Artist.class, q.getEntityType());
+               assertNull(q.getEntityName());
+               assertNull(q.getDbEntityName());
+       }
+ 
+       @Test
+       public void testQuery_TypeAndEntity() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class, 
"Painting");
+               assertNotNull(q);
+               assertFalse(q.isFetchingDataRows());
+ 
+               assertNull(q.getEntityType());
+               assertEquals("Painting", q.getEntityName());
+               assertNull(q.getDbEntityName());
+       }
+ 
+       @Test
+       public void testQuery_TypeAndDbEntity() {
+               ObjectSelect<DataRow> q = ObjectSelect.dbQuery("PAINTING");
+               assertNotNull(q);
+               assertTrue(q.isFetchingDataRows());
+ 
+               assertNull(q.getEntityType());
+               assertNull(q.getEntityName());
+               assertEquals("PAINTING", q.getDbEntityName());
+       }
+ 
+       @Test
+       public void testExp() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.exp(ExpressionFactory.matchExp("b", 4));
+               assertEquals("b = 4", q.getExp().toString());
+       }
+ 
+       @Test
+       public void testAnd_Array() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.and(ExpressionFactory.matchExp("b", 4), 
ExpressionFactory.greaterExp("c", 5));
+               assertEquals("(a = 3) and (b = 4) and (c > 5)", 
q.getExp().toString());
+       }
+ 
+       @Test
+       public void testAnd_Collection() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               Collection<Expression> exps = 
Arrays.asList(ExpressionFactory.matchExp("b", 4),
+                               ExpressionFactory.greaterExp("c", 5));
+ 
+               q.and(exps);
+               assertEquals("(a = 3) and (b = 4) and (c > 5)", 
q.getExp().toString());
+       }
+ 
+       @Test
+       public void testAnd_ArrayNull() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.and();
+               assertEquals("a = 3", q.getExp().toString());
+       }
+ 
+       @Test
+       public void testAnd_ArrayEmpty() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.and(new Expression[0]);
+               assertEquals("a = 3", q.getExp().toString());
+       }
+ 
+       @Test
+       public void testAnd_CollectionEmpty() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.and(Collections.<Expression> emptyList());
+               assertEquals("a = 3", q.getExp().toString());
+       }
+ 
+       @Test
+       public void testOr_Array() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               q.or(ExpressionFactory.matchExp("b", 4), 
ExpressionFactory.greaterExp("c", 5));
+               assertEquals("(a = 3) or (b = 4) or (c > 5)", 
q.getExp().toString());
+       }
+ 
+       @Test
+       public void testOr_Collection() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.exp(ExpressionFactory.matchExp("a", 3));
+               assertEquals("a = 3", q.getExp().toString());
+ 
+               Collection<Expression> exps = 
Arrays.asList(ExpressionFactory.matchExp("b", 4),
+                               ExpressionFactory.greaterExp("c", 5));
+ 
+               q.or(exps);
+               assertEquals("(a = 3) or (b = 4) or (c > 5)", 
q.getExp().toString());
+       }
+ 
+       @Test
+       public void testOrderBy_Array() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               Ordering o1 = new Ordering("x");
+               q.orderBy(o1);
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertSame(o1, result1[0]);
+ 
+               Ordering o2 = new Ordering("y");
+               q.orderBy(o2);
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(1, result2.length);
+               assertSame(o2, result2[0]);
+       }
+ 
+       @Test
+       public void testAddOrderBy_Array() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               Ordering o1 = new Ordering("x");
+               q.orderBy(o1);
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertSame(o1, result1[0]);
+ 
+               Ordering o2 = new Ordering("y");
+               q.addOrderBy(o2);
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(2, result2.length);
+               assertSame(o1, result2[0]);
+               assertSame(o2, result2[1]);
+       }
+ 
+       @Test
+       public void testOrderBy_Collection() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               Ordering o1 = new Ordering("x");
+               q.orderBy(Collections.singletonList(o1));
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertSame(o1, result1[0]);
+ 
+               Ordering o2 = new Ordering("y");
+               q.orderBy(Collections.singletonList(o2));
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(1, result2.length);
+               assertSame(o2, result2[0]);
+       }
+ 
+       @Test
+       public void testAddOrderBy_Collection() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               Ordering o1 = new Ordering("x");
+               q.orderBy(Collections.singletonList(o1));
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertSame(o1, result1[0]);
+ 
+               Ordering o2 = new Ordering("y");
+               q.addOrderBy(Collections.singletonList(o2));
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(2, result2.length);
+               assertSame(o1, result2[0]);
+               assertSame(o2, result2[1]);
+       }
+ 
+       @Test
+       public void testOrderBy_Property() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.orderBy("x");
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertEquals(new Ordering("x", SortOrder.ASCENDING), 
result1[0]);
+ 
+               q.orderBy("y");
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(1, result2.length);
+               assertEquals(new Ordering("y", SortOrder.ASCENDING), 
result2[0]);
+       }
+ 
+       @Test
+       public void testOrderBy_PropertyStrategy() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.orderBy("x", SortOrder.ASCENDING_INSENSITIVE);
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertEquals(new Ordering("x", 
SortOrder.ASCENDING_INSENSITIVE), result1[0]);
+ 
+               q.orderBy("y", SortOrder.DESCENDING);
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(1, result2.length);
+               assertEquals(new Ordering("y", SortOrder.DESCENDING), 
result2[0]);
+       }
+ 
+       @Test
+       public void testAddOrderBy_Property() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               q.addOrderBy("x");
+ 
+               Object[] result1 = q.getOrderings().toArray();
+               assertEquals(1, result1.length);
+               assertEquals(new Ordering("x", SortOrder.ASCENDING), 
result1[0]);
+ 
+               q.addOrderBy("y");
+ 
+               Object[] result2 = q.getOrderings().toArray();
+               assertEquals(2, result2.length);
+               assertEquals(new Ordering("x", SortOrder.ASCENDING), 
result2[0]);
+               assertEquals(new Ordering("y", SortOrder.ASCENDING), 
result2[1]);
+       }
+ 
+       @Test
+       public void testPrefetch() {
+ 
+               PrefetchTreeNode root = PrefetchTreeNode.withPath("a.b", 
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+               q.prefetch(root);
+ 
+               assertSame(root, q.getPrefetches());
+       }
+ 
+       @Test
+       public void testPrefetch_Path() {
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+               q.prefetch("a.b", PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
+               PrefetchTreeNode root1 = q.getPrefetches();
+ 
+               assertNotNull(root1);
+               assertNotNull(root1.getNode("a.b"));
+ 
+               q.prefetch("a.c", PrefetchTreeNode.DISJOINT_PREFETCH_SEMANTICS);
+               PrefetchTreeNode root2 = q.getPrefetches();
+ 
+               assertNotNull(root2);
+               assertNotNull(root2.getNode("a.c"));
+               assertNull(root2.getNode("a.b"));
+               assertNotSame(root1, root2);
+       }
+ 
+       @Test
+       public void testAddPrefetch() {
+ 
+               PrefetchTreeNode root = PrefetchTreeNode.withPath("a.b", 
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
+ 
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+               q.prefetch(root);
+ 
+               assertSame(root, q.getPrefetches());
+ 
+               PrefetchTreeNode subRoot = PrefetchTreeNode.withPath("a.b.c", 
PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS);
+               q.addPrefetch(subRoot);
+ 
+               assertSame(root, q.getPrefetches());
+ 
+               assertNotNull(root.getNode("a.b.c"));
+       }
+ 
+       @Test
+       public void testLimit() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               assertEquals(0, q.getLimit());
+               q.limit(2);
+               assertEquals(2, q.getLimit());
+ 
+               q.limit(3).limit(5);
+               assertEquals(5, q.getLimit());
+       }
+       
+       @Test
+       public void testOffset() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               assertEquals(0, q.getOffset());
+               q.offset(2);
+               assertEquals(2, q.getOffset());
+ 
+               q.offset(3).offset(5);
+               assertEquals(5, q.getOffset());
+       }
+       
+       @Test
+       public void testStatementFetchSize() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               assertEquals(0, q.getStatementFetchSize());
+               q.statementFetchSize(2);
+               assertEquals(2, q.getStatementFetchSize());
+ 
+               q.statementFetchSize(3).statementFetchSize(5);
+               assertEquals(5, q.getStatementFetchSize());
+       }
+       
+       
+       @Test
+       public void testCacheGroups_Collection() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+ 
+               assertNull(q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+ 
+               q.cacheGroups(Arrays.asList("a", "b"));
+               assertNull(q.getCacheStrategy());
+               assertArrayEquals(new String[] { "a", "b" }, 
q.getCacheGroups());
+       }
+ 
+       @Test
+       public void testCacheStrategy() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+ 
+               assertNull(q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+ 
+               q.cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, "a", "b");
+               assertSame(QueryCacheStrategy.LOCAL_CACHE, 
q.getCacheStrategy());
+               assertArrayEquals(new String[] { "a", "b" }, 
q.getCacheGroups());
+ 
+               q.cacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+               assertSame(QueryCacheStrategy.SHARED_CACHE, 
q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+       }
+       
+       @Test
+       public void testLocalCache() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+ 
+               assertNull(q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+ 
+               q.localCache("a", "b");
+               assertSame(QueryCacheStrategy.LOCAL_CACHE, 
q.getCacheStrategy());
+               assertArrayEquals(new String[] { "a", "b" }, 
q.getCacheGroups());
+ 
+               q.localCache();
+               assertSame(QueryCacheStrategy.LOCAL_CACHE, 
q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+       }
+       
+       @Test
+       public void testSharedCache() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+ 
+               assertNull(q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+ 
+               q.sharedCache("a", "b");
+               assertSame(QueryCacheStrategy.SHARED_CACHE, 
q.getCacheStrategy());
+               assertArrayEquals(new String[] { "a", "b" }, 
q.getCacheGroups());
+ 
+               q.sharedCache();
+               assertSame(QueryCacheStrategy.SHARED_CACHE, 
q.getCacheStrategy());
+               assertNull(q.getCacheGroups());
+       }
+ }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/4207ebea/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CompileIT.java
----------------------------------------------------------------------
diff --cc 
cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CompileIT.java
index 0000000,9a7a590..33fba9e
mode 000000,100644..100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CompileIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CompileIT.java
@@@ -1,0 -1,168 +1,169 @@@
+ /*****************************************************************
+  *   Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *    http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  ****************************************************************/
+ package org.apache.cayenne.query;
+ 
 -import static org.hamcrest.CoreMatchers.instanceOf;
 -import static org.junit.Assert.assertArrayEquals;
 -import static org.junit.Assert.assertEquals;
 -import static org.junit.Assert.assertFalse;
 -import static org.junit.Assert.assertNotNull;
 -import static org.junit.Assert.assertNull;
 -import static org.junit.Assert.assertThat;
 -import static org.junit.Assert.assertTrue;
 -
+ import org.apache.cayenne.CayenneDataObject;
+ import org.apache.cayenne.CayenneRuntimeException;
+ import org.apache.cayenne.DataRow;
+ import org.apache.cayenne.di.Inject;
+ import org.apache.cayenne.map.EntityResolver;
+ import org.apache.cayenne.testdo.testmap.Artist;
++import org.apache.cayenne.unit.di.server.CayenneProjects;
+ import org.apache.cayenne.unit.di.server.ServerCase;
+ import org.apache.cayenne.unit.di.server.UseServerRuntime;
+ import org.junit.Test;
+ 
 -@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
++import static org.hamcrest.CoreMatchers.instanceOf;
++import static org.junit.Assert.assertArrayEquals;
++import static org.junit.Assert.assertEquals;
++import static org.junit.Assert.assertFalse;
++import static org.junit.Assert.assertNotNull;
++import static org.junit.Assert.assertNull;
++import static org.junit.Assert.assertThat;
++import static org.junit.Assert.assertTrue;
++
++@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
+ public class ObjectSelect_CompileIT extends ServerCase {
+ 
+       @Inject
+       private EntityResolver resolver;
+ 
+       @Test
+       public void testCreateReplacementQuery_Bare() {
+ 
+               // use only a minimal number of attributes, with null/defaults 
for
+               // everything else
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               Query replacement = q.createReplacementQuery(resolver);
+               assertThat(replacement, instanceOf(SelectQuery.class));
+ 
+               @SuppressWarnings("unchecked")
+               SelectQuery<Artist> selectQuery = (SelectQuery<Artist>) 
replacement;
+               assertNull(selectQuery.getQualifier());
+               assertEquals(Artist.class, selectQuery.getRoot());
+               assertEquals(0, selectQuery.getOrderings().size());
+               assertNull(selectQuery.getPrefetchTree());
+ 
+               assertEquals(QueryCacheStrategy.NO_CACHE, 
selectQuery.getCacheStrategy());
+               assertNull(selectQuery.getCacheGroups());
+               assertEquals(0, selectQuery.getFetchLimit());
+               assertEquals(0, selectQuery.getFetchOffset());
+               assertEquals(0, selectQuery.getPageSize());
+               assertEquals(0, selectQuery.getStatementFetchSize());
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_Full() {
+ 
+               // add all possible attributes to the query and make sure they 
got
+               // propagated
+               ObjectSelect<Artist> q = 
ObjectSelect.query(Artist.class).exp(Artist.ARTIST_NAME.eq("me"))
+                               .orderBy(Artist.DATE_OF_BIRTH.asc(), 
Artist.ARTIST_NAME.desc()).prefetch(Artist.PAINTING_ARRAY.joint())
+                               .localCache("cg2", 
"cg1").limit(46).offset(9).pageSize(6).statementFetchSize(789);
+ 
+               Query replacement = q.createReplacementQuery(resolver);
+               assertThat(replacement, instanceOf(SelectQuery.class));
+ 
+               @SuppressWarnings("unchecked")
+               SelectQuery<Artist> selectQuery = (SelectQuery<Artist>) 
replacement;
+               assertEquals("artistName = \"me\"", 
selectQuery.getQualifier().toString());
+ 
+               assertEquals(2, selectQuery.getOrderings().size());
+               assertArrayEquals(new Object[] { Artist.DATE_OF_BIRTH.asc(), 
Artist.ARTIST_NAME.desc() }, selectQuery
+                               .getOrderings().toArray());
+ 
+               PrefetchTreeNode prefetch = selectQuery.getPrefetchTree();
+               assertNotNull(prefetch);
+               assertEquals(1, prefetch.getChildren().size());
+ 
+               PrefetchTreeNode childPrefetch = 
prefetch.getNode(Artist.PAINTING_ARRAY.getName());
+               assertEquals(Artist.PAINTING_ARRAY.getName(), 
childPrefetch.getName());
+               assertEquals(PrefetchTreeNode.JOINT_PREFETCH_SEMANTICS, 
childPrefetch.getSemantics());
+ 
+               assertEquals(QueryCacheStrategy.LOCAL_CACHE, 
selectQuery.getCacheStrategy());
+               assertArrayEquals(new Object[] { "cg2", "cg1" }, 
selectQuery.getCacheGroups());
+ 
+               assertEquals(46, selectQuery.getFetchLimit());
+               assertEquals(9, selectQuery.getFetchOffset());
+               assertEquals(6, selectQuery.getPageSize());
+               assertEquals(789, selectQuery.getStatementFetchSize());
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_RootClass() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery qr = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertEquals(Artist.class, qr.getRoot());
+               assertFalse(qr.isFetchingDataRows());
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_RootDataRow() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class);
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery qr = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertEquals(Artist.class, qr.getRoot());
+               assertTrue(qr.isFetchingDataRows());
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_RootDbEntity() {
+               ObjectSelect<DataRow> q = ObjectSelect.dbQuery("ARTIST");
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery qr = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertEquals(resolver.getDbEntity("ARTIST"), qr.getRoot());
+               assertTrue(qr.isFetchingDataRows());
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_RootObjEntity() {
+               ObjectSelect<CayenneDataObject> q = 
ObjectSelect.query(CayenneDataObject.class, "Artist");
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery qr = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertEquals(resolver.getObjEntity(Artist.class), qr.getRoot());
+               assertFalse(qr.isFetchingDataRows());
+       }
+ 
+       @Test(expected = CayenneRuntimeException.class)
+       public void testCreateReplacementQuery_RootAbscent() {
+               ObjectSelect<DataRow> q = 
ObjectSelect.dataRowQuery(Artist.class).entityName(null);
+               q.createReplacementQuery(resolver);
+       }
+ 
+       @Test
+       public void testCreateReplacementQuery_DataRows() {
+               ObjectSelect<Artist> q = ObjectSelect.query(Artist.class);
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery selectQuery1 = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertFalse(selectQuery1.isFetchingDataRows());
+ 
+               q.fetchDataRows();
+ 
+               @SuppressWarnings("rawtypes")
+               SelectQuery selectQuery2 = (SelectQuery) 
q.createReplacementQuery(resolver);
+               assertTrue(selectQuery2.isFetchingDataRows());
+       }
+ }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/4207ebea/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
----------------------------------------------------------------------
diff --cc 
cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
index 0000000,1b921a4..3f037c8
mode 000000,100644..100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_RunIT.java
@@@ -1,0 -1,94 +1,86 @@@
+ /*****************************************************************
+  *   Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *    http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  ****************************************************************/
+ package org.apache.cayenne.query;
+ 
 -import static org.hamcrest.CoreMatchers.instanceOf;
 -import static org.junit.Assert.assertEquals;
 -import static org.junit.Assert.assertNotNull;
 -import static org.junit.Assert.assertThat;
 -
 -import java.util.List;
 -
+ import org.apache.cayenne.DataRow;
+ import org.apache.cayenne.access.DataContext;
+ import org.apache.cayenne.di.Inject;
+ import org.apache.cayenne.test.jdbc.DBHelper;
+ import org.apache.cayenne.test.jdbc.TableHelper;
+ import org.apache.cayenne.testdo.testmap.Artist;
++import org.apache.cayenne.unit.di.server.CayenneProjects;
+ import org.apache.cayenne.unit.di.server.ServerCase;
+ import org.apache.cayenne.unit.di.server.UseServerRuntime;
+ import org.junit.Test;
+ 
 -@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
++import java.util.List;
++
++import static org.hamcrest.CoreMatchers.instanceOf;
++import static org.junit.Assert.assertEquals;
++import static org.junit.Assert.assertNotNull;
++import static org.junit.Assert.assertThat;
++
++@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
+ public class ObjectSelect_RunIT extends ServerCase {
+ 
+       @Inject
+       private DataContext context;
+ 
+       @Inject
+       private DBHelper dbHelper;
+ 
 -      @Override
 -      protected void setUpAfterInjection() throws Exception {
 -              dbHelper.deleteAll("PAINTING_INFO");
 -              dbHelper.deleteAll("PAINTING");
 -              dbHelper.deleteAll("ARTIST_EXHIBIT");
 -              dbHelper.deleteAll("ARTIST_GROUP");
 -              dbHelper.deleteAll("ARTIST");
 -      }
 -
+       protected void createArtistsDataSet() throws Exception {
+               TableHelper tArtist = new TableHelper(dbHelper, "ARTIST");
+               tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
+ 
+               long dateBase = System.currentTimeMillis();
+ 
+               for (int i = 1; i <= 20; i++) {
+                       tArtist.insert(i, "artist" + i, new 
java.sql.Date(dateBase + 10000 * i));
+               }
+       }
+ 
+       @Test
+       public void test_SelectObjects() throws Exception {
+ 
+               createArtistsDataSet();
+ 
+               List<Artist> result = 
ObjectSelect.query(Artist.class).select(context);
+               assertEquals(20, result.size());
+               assertThat(result.get(0), instanceOf(Artist.class));
+ 
+               Artist a = 
ObjectSelect.query(Artist.class).exp(Artist.ARTIST_NAME.eq("artist14")).selectOne(context);
+               assertNotNull(a);
+               assertEquals("artist14", a.getArtistName());
+       }
+ 
+       @Test
+       public void test_SelectDataRows() throws Exception {
+ 
+               createArtistsDataSet();
+ 
+               List<DataRow> result = 
ObjectSelect.dataRowQuery(Artist.class).select(context);
+               assertEquals(20, result.size());
+               assertThat(result.get(0), instanceOf(DataRow.class));
+ 
+               DataRow a = 
ObjectSelect.dataRowQuery(Artist.class).exp(Artist.ARTIST_NAME.eq("artist14")).selectOne(context);
+               assertNotNull(a);
+               assertEquals("artist14", a.get("ARTIST_NAME"));
+       }
+ }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/4207ebea/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
----------------------------------------------------------------------
diff --cc 
cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
index 0d27c83,0c9cec7..862b7ac
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
@@@ -54,8 -53,20 +55,11 @@@ public class SelectByIdIT extends Serve
        @Inject
        private ObjectContext context;
  
+       @Inject
+       private EntityResolver resolver;
+ 
 -      @Override
 -      protected void setUpAfterInjection() throws Exception {
 -              dbHelper.deleteAll("PAINTING_INFO");
 -              dbHelper.deleteAll("PAINTING");
 -              dbHelper.deleteAll("ARTIST_EXHIBIT");
 -              dbHelper.deleteAll("ARTIST_GROUP");
 -              dbHelper.deleteAll("ARTIST");
 -              dbHelper.deleteAll("COMPOUND_FK_TEST");
 -              dbHelper.deleteAll("COMPOUND_PK_TEST");
 -              dbHelper.deleteAll("CHAR_PK_TEST");
 -
 +      @Before
 +      public void testSetUp() throws Exception {
                tArtist = new TableHelper(dbHelper, "ARTIST");
                tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
        }

Reply via email to