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"); }