You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/11/02 08:09:53 UTC
[05/48] Installing Maven Failsafe Plugin
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
new file mode 100644
index 0000000..af76334
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryIT.java
@@ -0,0 +1,492 @@
+/*****************************************************************
+ * 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 java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cayenne.DataRow;
+import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.configuration.server.ServerRuntime;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
+import org.apache.cayenne.exp.Expression;
+import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.map.EntityResolver;
+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.testdo.testmap.BigIntegerEntity;
+import org.apache.cayenne.testdo.testmap.Painting;
+import org.apache.cayenne.unit.di.DataChannelInterceptor;
+import org.apache.cayenne.unit.di.UnitTestClosure;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.apache.cayenne.util.XMLEncoder;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class EJBQLQueryIT extends ServerCase {
+
+ @Inject
+ private DataContext context;
+
+ @Inject
+ private ServerRuntime runtime;
+
+ @Inject
+ protected DataChannelInterceptor queryInterceptor;
+
+ @Inject
+ private DBHelper dbHelper;
+
+ private TableHelper tArtist;
+ private TableHelper tPainting;
+ private TableHelper tBigIntegerEntity;
+
+ @Override
+ protected void setUpAfterInjection() throws Exception {
+ dbHelper.deleteAll("PAINTING");
+ dbHelper.deleteAll("ARTIST");
+ dbHelper.deleteAll("BIGINTEGER_ENTITY");
+
+ tArtist = new TableHelper(dbHelper, "ARTIST");
+ tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
+
+ tPainting = new TableHelper(dbHelper, "PAINTING");
+ tPainting.setColumns("PAINTING_ID", "ARTIST_ID", "PAINTING_TITLE");
+
+ tBigIntegerEntity = new TableHelper(dbHelper, "BIGINTEGER_ENTITY");
+ tBigIntegerEntity.setColumns("ID", "BIG_INTEGER_FIELD");
+ }
+
+ protected void createArtistsDataSet() throws Exception {
+ tArtist.insert(33001, "a0");
+ tArtist.insert(33002, "a1");
+ tArtist.insert(33003, "a2");
+ tArtist.insert(33004, "a3");
+ tArtist.insert(33005, "a4");
+ }
+
+ protected void createPaintingsDataSet() throws Exception {
+ tArtist.insert(33001, "a0");
+ tArtist.insert(33002, "a1");
+ tPainting.insert(33001, 33001, "title0");
+ tPainting.insert(33002, 33002, "title1");
+ tPainting.insert(33003, 33002, "%%?_title%%_");
+ }
+
+ protected void createBigIntegerEntitiesDataSet() throws Exception {
+ tBigIntegerEntity.insert(44001, new Long(744073709551715l));
+ }
+
+ public void testLongParameter() throws Exception {
+ createBigIntegerEntitiesDataSet();
+ String ejbql = "SELECT bie FROM BigIntegerEntity bie WHERE bie.bigIntegerField > ?1";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter(1,744073709551615l);
+ List<BigIntegerEntity> result = context.performQuery(query);
+ assertEquals(1, result.size());
+ }
+
+ public void testLongLiteral() throws Exception {
+ createBigIntegerEntitiesDataSet();
+ String ejbql = "SELECT bie FROM BigIntegerEntity bie WHERE bie.bigIntegerField > 744073709551615";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ List<BigIntegerEntity> result = context.performQuery(query);
+ assertEquals(1, result.size());
+ }
+
+ public void testParameters() {
+ String ejbql = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setParameter(1, "X");
+ query.setParameter("name", "Y");
+
+ Map<String, Object> parameters = query.getNamedParameters();
+ Map<Integer, Object> parameters1 = query.getPositionalParameters();
+ assertEquals(1, parameters.size());
+ assertEquals(1, parameters1.size());
+ assertEquals("X", parameters1.get(new Integer(1)));
+ assertEquals("Y", parameters.get("name"));
+ }
+
+ public void testCacheParameters() {
+ String ejbql1 = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
+ EJBQLQuery q1 = new EJBQLQuery(ejbql1);
+ q1.setParameter(1, "X");
+ q1.setParameter("name", "Y");
+ q1.setFetchOffset(1);
+ q1.setFetchLimit(5);
+ q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ String ejbql2 = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
+ EJBQLQuery q2 = new EJBQLQuery(ejbql2);
+ q2.setParameter(1, "X");
+ q2.setParameter("name", "Y");
+ q2.setFetchOffset(1);
+ q2.setFetchLimit(5);
+ q2.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+ .getMetaData(resolver)
+ .getCacheKey());
+ }
+
+ public void testCacheStrategy() throws Exception {
+
+ // insertValue();
+ createArtistsDataSet();
+
+ final String ejbql = "select a FROM Artist a";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+ final List<Artist> artist1 = context.performQuery(query);
+
+ queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
+
+ public void execute() {
+ List<Artist> artist2;
+ EJBQLQuery query1 = new EJBQLQuery(ejbql);
+ query1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+ artist2 = context.performQuery(query1);
+
+ assertEquals(artist1.get(0).getArtistName(), artist2
+ .get(0)
+ .getArtistName());
+ }
+ });
+
+ }
+
+ public void testDataRows() throws Exception {
+
+ // insertValue();
+ createArtistsDataSet();
+
+ String ejbql = "select a FROM Artist a";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ query.setFetchingDataRows(true);
+ List<?> artists = context.performQuery(query);
+
+ DataRow row = (DataRow) artists.get(0);
+ String artistName = (String) row.get("ARTIST_NAME");
+
+ Artist artist = (Artist) context.objectFromDataRow("Artist", row);
+ assertEquals(artistName, artist.getArtistName());
+ }
+
+ public void testGetExpression() {
+ String ejbql = "select a FROM Artist a";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ EJBQLCompiledExpression parsed = query.getExpression(runtime
+ .getDataDomain()
+ .getEntityResolver());
+ assertNotNull(parsed);
+ assertEquals(ejbql, parsed.getSource());
+ }
+
+ public void testGetName() {
+ String ejbql = "select a FROM Artist a";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ assertNull(query.getName());
+ query.setName("XYZ");
+ assertEquals("XYZ", query.getName());
+ }
+
+ public void testUniqueKeyEntity() {
+ // insertValue();
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+ String ejbql = "select a FROM Artist a";
+
+ EJBQLQuery q1 = new EJBQLQuery(ejbql);
+ q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ EJBQLQuery q2 = new EJBQLQuery(ejbql);
+ q2.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+ .getMetaData(resolver)
+ .getCacheKey());
+ }
+
+ public void testGetMetadata() {
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+ String ejbql = "select a FROM Artist a";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+ QueryMetadata md = query.getMetaData(resolver);
+
+ assertNotNull(md);
+
+ assertNotNull(md.getClassDescriptor());
+ assertSame(resolver.getClassDescriptor("Artist"), md.getClassDescriptor());
+
+ assertNotNull(md.getObjEntity());
+ assertSame(resolver.getObjEntity("Artist"), md.getObjEntity());
+
+ assertFalse(md.isFetchingDataRows());
+ assertTrue(md.isRefreshingObjects());
+ assertEquals(QueryCacheStrategy.NO_CACHE, md.getCacheStrategy());
+ }
+
+ public void testSelectRelationship() throws Exception {
+
+ // insertPaintValue();
+ createPaintingsDataSet();
+
+ String ejbql = "SELECT p.toArtist FROM Painting p";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ List<?> result = context.performQuery(query);
+
+ assertNotNull(result);
+ assertEquals(3, result.size());
+
+ assertEquals(Artist.class, result.get(0).getClass());
+
+ String ejbql2 = "SELECT p.toArtist, p FROM Painting p";
+ EJBQLQuery query2 = new EJBQLQuery(ejbql2);
+
+ List<?> result2 = context.performQuery(query2);
+
+ assertNotNull(result2);
+ assertEquals(3, result2.size());
+ assertEquals(2, ((Object[]) result2.get(0)).length);
+
+ assertEquals(Artist.class, ((Object[]) result2.get(0))[0].getClass());
+ assertEquals(Painting.class, ((Object[]) result2.get(0))[1].getClass());
+
+ String ejbql3 = "SELECT p.toArtist, p.paintingTitle FROM Painting p";
+ EJBQLQuery query3 = new EJBQLQuery(ejbql3);
+
+ List<?> result3 = context.performQuery(query3);
+
+ assertNotNull(result3);
+ assertEquals(3, result3.size());
+ assertEquals(2, ((Object[]) result3.get(0)).length);
+
+ assertEquals(Artist.class, ((Object[]) result3.get(0))[0].getClass());
+ assertEquals(String.class, ((Object[]) result3.get(0))[1].getClass());
+ }
+
+ public void testEncodeAsXML() {
+
+ String ejbql = "select a FROM Artist a";
+ String name = "Test";
+
+ StringWriter w = new StringWriter();
+ XMLEncoder e = new XMLEncoder(new PrintWriter(w));
+
+ String separator = System.getProperty("line.separator");
+
+ StringBuffer s = new StringBuffer("<query name=\"");
+ s.append(name);
+ s.append("\" factory=\"");
+ s.append("org.apache.cayenne.map.EjbqlBuilder");
+ s.append("\">");
+ s.append(separator);
+
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ if (query.getEjbqlStatement() != null) {
+ s.append("<ejbql><![CDATA[");
+ s.append(query.getEjbqlStatement());
+ s.append("]]></ejbql>");
+ }
+ s.append(separator);
+ s.append("</query>");
+ s.append(separator);
+ query.setName(name);
+ query.encodeAsXML(e);
+
+ assertEquals(w.getBuffer().toString(), s.toString());
+ }
+
+ public void testInWithMultipleStringPositionalParameters_withBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.paintingTitle in (?1,?2,?3)");
+ query.setParameter(1,"title0");
+ query.setParameter(2,"title1");
+ query.setParameter(3,"title2");
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(2, paintings.size());
+ }
+
+ public void testInWithSingleStringPositionalParameter_withoutBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.paintingTitle in ?1");
+ query.setParameter(1,"title0");
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(1, paintings.size());
+ }
+
+ public void testInWithSingleCollectionNamedParameter_withoutBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in :artists");
+ query.setParameter("artists", context.performQuery(new SelectQuery<Artist>(Artist.class)));
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(3, paintings.size());
+ }
+
+ public void testInWithSingleCollectionPositionalParameter_withoutBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in ?1");
+ query.setParameter(1,context.performQuery(new SelectQuery<Artist>(Artist.class)));
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(3, paintings.size());
+ }
+
+ public void testInWithSingleCollectionNamedParameter_withBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in (:artists)");
+ query.setParameter("artists", context.performQuery(new SelectQuery<Artist>(Artist.class)));
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(3, paintings.size());
+ }
+
+ public void testInWithSingleCollectionPositionalParameter_withBrackets() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in (?1)");
+ query.setParameter(1,context.performQuery(new SelectQuery<Artist>(Artist.class)));
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(3, paintings.size());
+ }
+
+ public void testNullParameter() {
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist=:x");
+ query.setParameter("x", null);
+ context.performQuery(query);
+ }
+
+ public void testNullNotEqualsParameter() {
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist<>:x");
+ query.setParameter("x", null);
+ context.performQuery(query);
+ }
+
+ public void testNullPositionalParameter() {
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist=?1");
+ query.setParameter(1, null);
+ context.performQuery(query);
+ }
+
+ public void testNullAndNotNullParameter() {
+ EJBQLQuery query = new EJBQLQuery(
+ "select p from Painting p WHERE p.toArtist=:x OR p.toArtist.artistName=:b");
+ query.setParameter("x", null);
+ query.setParameter("b", "Y");
+ context.performQuery(query);
+ }
+
+ public void testLikeWithExplicitEscape() throws Exception {
+ createPaintingsDataSet();
+ EJBQLQuery query = new EJBQLQuery("SELECT p FROM Painting p WHERE p.paintingTitle LIKE '|%|%?|_title|%|%|_' ESCAPE '|'");
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(1, paintings.size());
+ assertEquals("%%?_title%%_", paintings.get(0).getPaintingTitle());
+ }
+
+ public void testJoinToJoined() {
+ EJBQLQuery query = new EJBQLQuery(
+ "select g from Gallery g inner join g.paintingArray p where p.toArtist.artistName like '%a%'");
+ context.performQuery(query);
+ }
+
+ public void testJoinAndCount() {
+ EJBQLQuery query = new EJBQLQuery(
+ "select count(p) from Painting p where p.toGallery.galleryName LIKE '%a%' AND ("
+ + "p.paintingTitle like '%a%' or "
+ + "p.toArtist.artistName like '%a%'"
+ + ")");
+ context.performQuery(query);
+ }
+
+ // SELECT COUNT(p) from Product p where p.vsCatalog.id = 1 and
+ // (
+ // p.displayName like '%rimadyl%'
+ // or p.manufacturer.name like '%rimadyl%'
+ // or p.description like '%rimadyl%'
+ // or p.longdescription like '%rimadyl%'
+ // or p.longdescription2 like '%rimadyl%'
+ // or p.manufacturerPartNumber like '%rimadyl%'
+ // or p.partNumber like '%rimadyl%'
+ // )
+
+ public void testRelationshipWhereClause() throws Exception {
+ Artist a = context.newObject(Artist.class);
+ a.setArtistName("a");
+ Painting p = context.newObject(Painting.class);
+ p.setPaintingTitle("p");
+ p.setToArtist(a);
+ context.commitChanges();
+
+ EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist=:a");
+ query.setParameter("a", a);
+
+ List<Painting> paintings = context.performQuery(query);
+ assertEquals(1, paintings.size());
+ assertSame(p, paintings.get(0));
+ }
+
+ public void testRelationshipWhereClause2() throws Exception {
+ Expression exp = ExpressionFactory.matchExp(Painting.TO_GALLERY_PROPERTY, null);
+ EJBQLQuery query = new EJBQLQuery("select p.toArtist from Painting p where "
+ + exp.toEJBQL("p"));
+
+ context.performQuery(query);
+ }
+
+ public void testOrBrackets() throws Exception {
+ Artist a = context.newObject(Artist.class);
+ a.setArtistName("testOrBrackets");
+ context.commitChanges();
+
+ // this query is equivalent to (false and (false or true)) and
+ // should always return 0 rows
+ EJBQLQuery query = new EJBQLQuery("select a from Artist a "
+ + "where a.artistName <> a.artistName and "
+ + "(a.artistName <> a.artistName or a.artistName = a.artistName)");
+ assertEquals(context.performQuery(query).size(), 0);
+
+ // on the other hand, the following is equivalent to (false and false) or true)
+ // and
+ // should return >0 rows
+ query = new EJBQLQuery("select a from Artist a "
+ + "where a.artistName <> a.artistName and "
+ + "a.artistName <> a.artistName or a.artistName = a.artistName");
+ assertTrue(context.performQuery(query).size() > 0);
+
+ // checking brackets around not
+ query = new EJBQLQuery("select a from Artist a "
+ + "where not(a.artistName <> a.artistName and "
+ + "a.artistName <> a.artistName or a.artistName = a.artistName)");
+ assertEquals(context.performQuery(query).size(), 0);
+
+ // not is first to process
+ query = new EJBQLQuery("select a from Artist a "
+ + "where not a.artistName <> a.artistName or "
+ + "a.artistName = a.artistName");
+ assertTrue(context.performQuery(query).size() > 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
deleted file mode 100644
index 4d02e07..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/EJBQLQueryTest.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.query;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cayenne.DataRow;
-import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.map.EntityResolver;
-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.testdo.testmap.BigIntegerEntity;
-import org.apache.cayenne.testdo.testmap.Painting;
-import org.apache.cayenne.unit.di.DataChannelInterceptor;
-import org.apache.cayenne.unit.di.UnitTestClosure;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-import org.apache.cayenne.util.XMLEncoder;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class EJBQLQueryTest extends ServerCase {
-
- @Inject
- private DataContext context;
-
- @Inject
- private ServerRuntime runtime;
-
- @Inject
- protected DataChannelInterceptor queryInterceptor;
-
- @Inject
- private DBHelper dbHelper;
-
- private TableHelper tArtist;
- private TableHelper tPainting;
- private TableHelper tBigIntegerEntity;
-
- @Override
- protected void setUpAfterInjection() throws Exception {
- dbHelper.deleteAll("PAINTING");
- dbHelper.deleteAll("ARTIST");
- dbHelper.deleteAll("BIGINTEGER_ENTITY");
-
- tArtist = new TableHelper(dbHelper, "ARTIST");
- tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
-
- tPainting = new TableHelper(dbHelper, "PAINTING");
- tPainting.setColumns("PAINTING_ID", "ARTIST_ID", "PAINTING_TITLE");
-
- tBigIntegerEntity = new TableHelper(dbHelper, "BIGINTEGER_ENTITY");
- tBigIntegerEntity.setColumns("ID", "BIG_INTEGER_FIELD");
- }
-
- protected void createArtistsDataSet() throws Exception {
- tArtist.insert(33001, "a0");
- tArtist.insert(33002, "a1");
- tArtist.insert(33003, "a2");
- tArtist.insert(33004, "a3");
- tArtist.insert(33005, "a4");
- }
-
- protected void createPaintingsDataSet() throws Exception {
- tArtist.insert(33001, "a0");
- tArtist.insert(33002, "a1");
- tPainting.insert(33001, 33001, "title0");
- tPainting.insert(33002, 33002, "title1");
- tPainting.insert(33003, 33002, "%%?_title%%_");
- }
-
- protected void createBigIntegerEntitiesDataSet() throws Exception {
- tBigIntegerEntity.insert(44001, new Long(744073709551715l));
- }
-
- public void testLongParameter() throws Exception {
- createBigIntegerEntitiesDataSet();
- String ejbql = "SELECT bie FROM BigIntegerEntity bie WHERE bie.bigIntegerField > ?1";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- query.setParameter(1,744073709551615l);
- List<BigIntegerEntity> result = context.performQuery(query);
- assertEquals(1, result.size());
- }
-
- public void testLongLiteral() throws Exception {
- createBigIntegerEntitiesDataSet();
- String ejbql = "SELECT bie FROM BigIntegerEntity bie WHERE bie.bigIntegerField > 744073709551615";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- List<BigIntegerEntity> result = context.performQuery(query);
- assertEquals(1, result.size());
- }
-
- public void testParameters() {
- String ejbql = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- query.setParameter(1, "X");
- query.setParameter("name", "Y");
-
- Map<String, Object> parameters = query.getNamedParameters();
- Map<Integer, Object> parameters1 = query.getPositionalParameters();
- assertEquals(1, parameters.size());
- assertEquals(1, parameters1.size());
- assertEquals("X", parameters1.get(new Integer(1)));
- assertEquals("Y", parameters.get("name"));
- }
-
- public void testCacheParameters() {
- String ejbql1 = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
- EJBQLQuery q1 = new EJBQLQuery(ejbql1);
- q1.setParameter(1, "X");
- q1.setParameter("name", "Y");
- q1.setFetchOffset(1);
- q1.setFetchLimit(5);
- q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- String ejbql2 = "select a FROM Artist a WHERE a.artistName = ?1 OR a.artistName = :name";
- EJBQLQuery q2 = new EJBQLQuery(ejbql2);
- q2.setParameter(1, "X");
- q2.setParameter("name", "Y");
- q2.setFetchOffset(1);
- q2.setFetchLimit(5);
- q2.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
- .getMetaData(resolver)
- .getCacheKey());
- }
-
- public void testCacheStrategy() throws Exception {
-
- // insertValue();
- createArtistsDataSet();
-
- final String ejbql = "select a FROM Artist a";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
- final List<Artist> artist1 = context.performQuery(query);
-
- queryInterceptor.runWithQueriesBlocked(new UnitTestClosure() {
-
- public void execute() {
- List<Artist> artist2;
- EJBQLQuery query1 = new EJBQLQuery(ejbql);
- query1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
- artist2 = context.performQuery(query1);
-
- assertEquals(artist1.get(0).getArtistName(), artist2
- .get(0)
- .getArtistName());
- }
- });
-
- }
-
- public void testDataRows() throws Exception {
-
- // insertValue();
- createArtistsDataSet();
-
- String ejbql = "select a FROM Artist a";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- query.setFetchingDataRows(true);
- List<?> artists = context.performQuery(query);
-
- DataRow row = (DataRow) artists.get(0);
- String artistName = (String) row.get("ARTIST_NAME");
-
- Artist artist = (Artist) context.objectFromDataRow("Artist", row);
- assertEquals(artistName, artist.getArtistName());
- }
-
- public void testGetExpression() {
- String ejbql = "select a FROM Artist a";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- EJBQLCompiledExpression parsed = query.getExpression(runtime
- .getDataDomain()
- .getEntityResolver());
- assertNotNull(parsed);
- assertEquals(ejbql, parsed.getSource());
- }
-
- public void testGetName() {
- String ejbql = "select a FROM Artist a";
- EJBQLQuery query = new EJBQLQuery(ejbql);
-
- assertNull(query.getName());
- query.setName("XYZ");
- assertEquals("XYZ", query.getName());
- }
-
- public void testUniqueKeyEntity() {
- // insertValue();
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
- String ejbql = "select a FROM Artist a";
-
- EJBQLQuery q1 = new EJBQLQuery(ejbql);
- q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- EJBQLQuery q2 = new EJBQLQuery(ejbql);
- q2.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
- .getMetaData(resolver)
- .getCacheKey());
- }
-
- public void testGetMetadata() {
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
- String ejbql = "select a FROM Artist a";
- EJBQLQuery query = new EJBQLQuery(ejbql);
- QueryMetadata md = query.getMetaData(resolver);
-
- assertNotNull(md);
-
- assertNotNull(md.getClassDescriptor());
- assertSame(resolver.getClassDescriptor("Artist"), md.getClassDescriptor());
-
- assertNotNull(md.getObjEntity());
- assertSame(resolver.getObjEntity("Artist"), md.getObjEntity());
-
- assertFalse(md.isFetchingDataRows());
- assertTrue(md.isRefreshingObjects());
- assertEquals(QueryCacheStrategy.NO_CACHE, md.getCacheStrategy());
- }
-
- public void testSelectRelationship() throws Exception {
-
- // insertPaintValue();
- createPaintingsDataSet();
-
- String ejbql = "SELECT p.toArtist FROM Painting p";
- EJBQLQuery query = new EJBQLQuery(ejbql);
-
- List<?> result = context.performQuery(query);
-
- assertNotNull(result);
- assertEquals(3, result.size());
-
- assertEquals(Artist.class, result.get(0).getClass());
-
- String ejbql2 = "SELECT p.toArtist, p FROM Painting p";
- EJBQLQuery query2 = new EJBQLQuery(ejbql2);
-
- List<?> result2 = context.performQuery(query2);
-
- assertNotNull(result2);
- assertEquals(3, result2.size());
- assertEquals(2, ((Object[]) result2.get(0)).length);
-
- assertEquals(Artist.class, ((Object[]) result2.get(0))[0].getClass());
- assertEquals(Painting.class, ((Object[]) result2.get(0))[1].getClass());
-
- String ejbql3 = "SELECT p.toArtist, p.paintingTitle FROM Painting p";
- EJBQLQuery query3 = new EJBQLQuery(ejbql3);
-
- List<?> result3 = context.performQuery(query3);
-
- assertNotNull(result3);
- assertEquals(3, result3.size());
- assertEquals(2, ((Object[]) result3.get(0)).length);
-
- assertEquals(Artist.class, ((Object[]) result3.get(0))[0].getClass());
- assertEquals(String.class, ((Object[]) result3.get(0))[1].getClass());
- }
-
- public void testEncodeAsXML() {
-
- String ejbql = "select a FROM Artist a";
- String name = "Test";
-
- StringWriter w = new StringWriter();
- XMLEncoder e = new XMLEncoder(new PrintWriter(w));
-
- String separator = System.getProperty("line.separator");
-
- StringBuffer s = new StringBuffer("<query name=\"");
- s.append(name);
- s.append("\" factory=\"");
- s.append("org.apache.cayenne.map.EjbqlBuilder");
- s.append("\">");
- s.append(separator);
-
- EJBQLQuery query = new EJBQLQuery(ejbql);
-
- if (query.getEjbqlStatement() != null) {
- s.append("<ejbql><![CDATA[");
- s.append(query.getEjbqlStatement());
- s.append("]]></ejbql>");
- }
- s.append(separator);
- s.append("</query>");
- s.append(separator);
- query.setName(name);
- query.encodeAsXML(e);
-
- assertEquals(w.getBuffer().toString(), s.toString());
- }
-
- public void testInWithMultipleStringPositionalParameters_withBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.paintingTitle in (?1,?2,?3)");
- query.setParameter(1,"title0");
- query.setParameter(2,"title1");
- query.setParameter(3,"title2");
- List<Painting> paintings = context.performQuery(query);
- assertEquals(2, paintings.size());
- }
-
- public void testInWithSingleStringPositionalParameter_withoutBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.paintingTitle in ?1");
- query.setParameter(1,"title0");
- List<Painting> paintings = context.performQuery(query);
- assertEquals(1, paintings.size());
- }
-
- public void testInWithSingleCollectionNamedParameter_withoutBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in :artists");
- query.setParameter("artists", context.performQuery(new SelectQuery<Artist>(Artist.class)));
- List<Painting> paintings = context.performQuery(query);
- assertEquals(3, paintings.size());
- }
-
- public void testInWithSingleCollectionPositionalParameter_withoutBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in ?1");
- query.setParameter(1,context.performQuery(new SelectQuery<Artist>(Artist.class)));
- List<Painting> paintings = context.performQuery(query);
- assertEquals(3, paintings.size());
- }
-
- public void testInWithSingleCollectionNamedParameter_withBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in (:artists)");
- query.setParameter("artists", context.performQuery(new SelectQuery<Artist>(Artist.class)));
- List<Painting> paintings = context.performQuery(query);
- assertEquals(3, paintings.size());
- }
-
- public void testInWithSingleCollectionPositionalParameter_withBrackets() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist in (?1)");
- query.setParameter(1,context.performQuery(new SelectQuery<Artist>(Artist.class)));
- List<Painting> paintings = context.performQuery(query);
- assertEquals(3, paintings.size());
- }
-
- public void testNullParameter() {
- EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist=:x");
- query.setParameter("x", null);
- context.performQuery(query);
- }
-
- public void testNullNotEqualsParameter() {
- EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist<>:x");
- query.setParameter("x", null);
- context.performQuery(query);
- }
-
- public void testNullPositionalParameter() {
- EJBQLQuery query = new EJBQLQuery("select p from Painting p WHERE p.toArtist=?1");
- query.setParameter(1, null);
- context.performQuery(query);
- }
-
- public void testNullAndNotNullParameter() {
- EJBQLQuery query = new EJBQLQuery(
- "select p from Painting p WHERE p.toArtist=:x OR p.toArtist.artistName=:b");
- query.setParameter("x", null);
- query.setParameter("b", "Y");
- context.performQuery(query);
- }
-
- public void testLikeWithExplicitEscape() throws Exception {
- createPaintingsDataSet();
- EJBQLQuery query = new EJBQLQuery("SELECT p FROM Painting p WHERE p.paintingTitle LIKE '|%|%?|_title|%|%|_' ESCAPE '|'");
- List<Painting> paintings = context.performQuery(query);
- assertEquals(1, paintings.size());
- assertEquals("%%?_title%%_", paintings.get(0).getPaintingTitle());
- }
-
- public void testJoinToJoined() {
- EJBQLQuery query = new EJBQLQuery(
- "select g from Gallery g inner join g.paintingArray p where p.toArtist.artistName like '%a%'");
- context.performQuery(query);
- }
-
- public void testJoinAndCount() {
- EJBQLQuery query = new EJBQLQuery(
- "select count(p) from Painting p where p.toGallery.galleryName LIKE '%a%' AND ("
- + "p.paintingTitle like '%a%' or "
- + "p.toArtist.artistName like '%a%'"
- + ")");
- context.performQuery(query);
- }
-
- // SELECT COUNT(p) from Product p where p.vsCatalog.id = 1 and
- // (
- // p.displayName like '%rimadyl%'
- // or p.manufacturer.name like '%rimadyl%'
- // or p.description like '%rimadyl%'
- // or p.longdescription like '%rimadyl%'
- // or p.longdescription2 like '%rimadyl%'
- // or p.manufacturerPartNumber like '%rimadyl%'
- // or p.partNumber like '%rimadyl%'
- // )
-
- public void testRelationshipWhereClause() throws Exception {
- Artist a = context.newObject(Artist.class);
- a.setArtistName("a");
- Painting p = context.newObject(Painting.class);
- p.setPaintingTitle("p");
- p.setToArtist(a);
- context.commitChanges();
-
- EJBQLQuery query = new EJBQLQuery("select p from Painting p where p.toArtist=:a");
- query.setParameter("a", a);
-
- List<Painting> paintings = context.performQuery(query);
- assertEquals(1, paintings.size());
- assertSame(p, paintings.get(0));
- }
-
- public void testRelationshipWhereClause2() throws Exception {
- Expression exp = ExpressionFactory.matchExp(Painting.TO_GALLERY_PROPERTY, null);
- EJBQLQuery query = new EJBQLQuery("select p.toArtist from Painting p where "
- + exp.toEJBQL("p"));
-
- context.performQuery(query);
- }
-
- public void testOrBrackets() throws Exception {
- Artist a = context.newObject(Artist.class);
- a.setArtistName("testOrBrackets");
- context.commitChanges();
-
- // this query is equivalent to (false and (false or true)) and
- // should always return 0 rows
- EJBQLQuery query = new EJBQLQuery("select a from Artist a "
- + "where a.artistName <> a.artistName and "
- + "(a.artistName <> a.artistName or a.artistName = a.artistName)");
- assertEquals(context.performQuery(query).size(), 0);
-
- // on the other hand, the following is equivalent to (false and false) or true)
- // and
- // should return >0 rows
- query = new EJBQLQuery("select a from Artist a "
- + "where a.artistName <> a.artistName and "
- + "a.artistName <> a.artistName or a.artistName = a.artistName");
- assertTrue(context.performQuery(query).size() > 0);
-
- // checking brackets around not
- query = new EJBQLQuery("select a from Artist a "
- + "where not(a.artistName <> a.artistName and "
- + "a.artistName <> a.artistName or a.artistName = a.artistName)");
- assertEquals(context.performQuery(query).size(), 0);
-
- // not is first to process
- query = new EJBQLQuery("select a from Artist a "
- + "where not a.artistName <> a.artistName or "
- + "a.artistName = a.artistName");
- assertTrue(context.performQuery(query).size() > 0);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyIT.java
new file mode 100644
index 0000000..61ec8f0
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyIT.java
@@ -0,0 +1,107 @@
+/*****************************************************************
+ * 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.configuration.server.ServerRuntime;
+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.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class ProcedureQueryCacheKeyIT extends ServerCase {
+
+ @Inject
+ private ServerRuntime runtime;
+
+ public void testNoCache() {
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.NO_CACHE, md1.getCacheStrategy());
+ assertNull(md1.getCacheKey());
+
+ query.setName("XYZ");
+ QueryMetadata md2 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.NO_CACHE, md2.getCacheStrategy());
+ assertNull(md2.getCacheKey());
+ }
+
+ public void testLocalCache() {
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
+
+ query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.LOCAL_CACHE, md1.getCacheStrategy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testSharedCache() {
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
+
+ query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testNamedQuery() {
+
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
+
+ query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+ query.setName("XYZ");
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
+ assertEquals("proc:", md1.getCacheKey());
+ }
+
+ public void testCacheFetchOffsetAndLimit() {
+ EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
+
+ ProcedureQuery q1 = new ProcedureQuery("ABC", Artist.class);
+ q1.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+ q1.setFetchOffset(5);
+ q1.setFetchLimit(3);
+
+ ProcedureQuery q2 = new ProcedureQuery("ABC", Artist.class);
+ q2.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+ q2.setFetchOffset(5);
+ q2.setFetchLimit(3);
+
+ assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+ .getMetaData(resolver)
+ .getCacheKey());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyTest.java
deleted file mode 100644
index 2e96881..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ProcedureQueryCacheKeyTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.query;
-
-import org.apache.cayenne.configuration.server.ServerRuntime;
-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.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class ProcedureQueryCacheKeyTest extends ServerCase {
-
- @Inject
- private ServerRuntime runtime;
-
- public void testNoCache() {
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.NO_CACHE, md1.getCacheStrategy());
- assertNull(md1.getCacheKey());
-
- query.setName("XYZ");
- QueryMetadata md2 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.NO_CACHE, md2.getCacheStrategy());
- assertNull(md2.getCacheKey());
- }
-
- public void testLocalCache() {
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
-
- query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.LOCAL_CACHE, md1.getCacheStrategy());
- assertNotNull(md1.getCacheKey());
- }
-
- public void testSharedCache() {
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
-
- query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
- assertNotNull(md1.getCacheKey());
- }
-
- public void testNamedQuery() {
-
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- ProcedureQuery query = new ProcedureQuery("ABC", Artist.class);
-
- query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
- query.setName("XYZ");
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
- assertEquals("proc:", md1.getCacheKey());
- }
-
- public void testCacheFetchOffsetAndLimit() {
- EntityResolver resolver = runtime.getDataDomain().getEntityResolver();
-
- ProcedureQuery q1 = new ProcedureQuery("ABC", Artist.class);
- q1.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
- q1.setFetchOffset(5);
- q1.setFetchLimit(3);
-
- ProcedureQuery q2 = new ProcedureQuery("ABC", Artist.class);
- q2.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
- q2.setFetchOffset(5);
- q2.setFetchLimit(3);
-
- assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
- .getMetaData(resolver)
- .getCacheKey());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainIT.java
new file mode 100644
index 0000000..ee23624
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainIT.java
@@ -0,0 +1,63 @@
+/*****************************************************************
+ * 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.configuration.server.ServerRuntime;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class QueryChainIT extends ServerCase {
+
+ @Inject
+ private ServerRuntime runtime;
+
+ public void testSelectQuery() {
+
+ QueryChain chain = new QueryChain();
+ chain.addQuery(new SelectQuery(Artist.class));
+ chain.addQuery(new SelectQuery(Artist.class));
+
+ QueryMetadata md = chain.getMetaData(runtime.getDataDomain().getEntityResolver());
+
+ assertNotNull(md);
+ assertTrue(md.isFetchingDataRows());
+ assertNull(md.getObjEntity());
+ }
+
+ public void testSelectQueryDataRows() {
+
+ QueryChain chain = new QueryChain();
+ SelectQuery q1 = new SelectQuery(Artist.class);
+ q1.setFetchingDataRows(true);
+ chain.addQuery(q1);
+
+ SelectQuery q2 = new SelectQuery(Artist.class);
+ q2.setFetchingDataRows(true);
+ chain.addQuery(q2);
+
+ QueryMetadata md = chain.getMetaData(runtime.getDataDomain().getEntityResolver());
+
+ assertNotNull(md);
+ assertTrue(md.isFetchingDataRows());
+ assertNull(md.getObjEntity());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainTest.java
deleted file mode 100644
index 182f2a8..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/QueryChainTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.query;
-
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.testdo.testmap.Artist;
-import org.apache.cayenne.unit.di.server.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class QueryChainTest extends ServerCase {
-
- @Inject
- private ServerRuntime runtime;
-
- public void testSelectQuery() {
-
- QueryChain chain = new QueryChain();
- chain.addQuery(new SelectQuery(Artist.class));
- chain.addQuery(new SelectQuery(Artist.class));
-
- QueryMetadata md = chain.getMetaData(runtime.getDataDomain().getEntityResolver());
-
- assertNotNull(md);
- assertTrue(md.isFetchingDataRows());
- assertNull(md.getObjEntity());
- }
-
- public void testSelectQueryDataRows() {
-
- QueryChain chain = new QueryChain();
- SelectQuery q1 = new SelectQuery(Artist.class);
- q1.setFetchingDataRows(true);
- chain.addQuery(q1);
-
- SelectQuery q2 = new SelectQuery(Artist.class);
- q2.setFetchingDataRows(true);
- chain.addQuery(q2);
-
- QueryMetadata md = chain.getMetaData(runtime.getDataDomain().getEntityResolver());
-
- assertNotNull(md);
- assertTrue(md.isFetchingDataRows());
- assertNull(md.getObjEntity());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
new file mode 100644
index 0000000..f26e066
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
@@ -0,0 +1,213 @@
+/*****************************************************************
+ * 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.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.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+import java.util.List;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class SQLSelectIT 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));
+ }
+ }
+
+ public void test_DataRows_DataMapNameRoot() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("tstmap", "SELECT * FROM ARTIST");
+ assertTrue(q1.isFetchingDataRows());
+
+ List<DataRow> result = context.select(q1);
+ assertEquals(20, result.size());
+ assertTrue(result.get(0) instanceof DataRow);
+ }
+
+ public void test_DataRows_DefaultRoot() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
+ assertTrue(q1.isFetchingDataRows());
+
+ List<DataRow> result = context.select(q1);
+ assertEquals(20, result.size());
+ assertTrue(result.get(0) instanceof DataRow);
+ }
+
+ public void test_DataRows_ClassRoot() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST");
+ assertFalse(q1.isFetchingDataRows());
+ List<Artist> result = context.select(q1);
+ assertEquals(20, result.size());
+ assertTrue(result.get(0) instanceof Artist);
+ }
+
+ public void test_DataRows_ClassRoot_Parameters() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)");
+ q1.getParameters().put("a", "artist3");
+
+ assertFalse(q1.isFetchingDataRows());
+ Artist a = context.selectOne(q1);
+ assertEquals("artist3", a.getArtistName());
+ }
+
+ public void test_DataRows_ClassRoot_Bind() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<Artist> q1 = SQLSelect.query(Artist.class,
+ "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a) OR ARTIST_NAME = #bind($b)");
+ q1.params("a", "artist3").params("b", "artist4");
+
+ List<Artist> result = context.select(q1);
+ assertEquals(2, result.size());
+ }
+
+ public void test_DataRows_ColumnNameCaps() throws Exception {
+
+ SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST WHERE ARTIST_NAME = 'artist2'");
+ q1.upperColumnNames();
+
+ SQLTemplate r1 = (SQLTemplate) q1.getReplacementQuery(context.getEntityResolver());
+ assertEquals(CapsStrategy.UPPER, r1.getColumnNamesCapitalization());
+
+ q1.lowerColumnNames();
+ SQLTemplate r2 = (SQLTemplate) q1.getReplacementQuery(context.getEntityResolver());
+ assertEquals(CapsStrategy.LOWER, r2.getColumnNamesCapitalization());
+ }
+
+ public void test_DataRows_FetchLimit() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
+ q1.limit(5);
+
+ assertEquals(5, context.select(q1).size());
+ }
+
+ public void test_DataRows_FetchOffset() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
+ q1.offset(4);
+
+ assertEquals(16, context.select(q1).size());
+ }
+
+ public void test_Append() throws Exception {
+
+ createArtistsDataSet();
+
+ SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST")
+ .append(" WHERE ARTIST_NAME = #bind($a)").params("a", "artist3");
+
+ List<Artist> result = context.select(q1);
+ assertEquals(1, result.size());
+ }
+
+ public void test_Select() throws Exception {
+
+ createArtistsDataSet();
+
+ List<Artist> result = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
+ .params("a", "artist3").select(context);
+
+ assertEquals(1, result.size());
+ }
+
+ public void test_SelectOne() throws Exception {
+
+ createArtistsDataSet();
+
+ Artist a = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
+ .params("a", "artist3").selectOne(context);
+
+ assertEquals("artist3", a.getArtistName());
+ }
+
+ public void test_SelectLong() throws Exception {
+
+ createArtistsDataSet();
+
+ long id = SQLSelect.scalarQuery(Long.class, "SELECT ARTIST_ID FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
+ .params("a", "artist3").selectOne(context);
+
+ assertEquals(3l, id);
+ }
+
+ public void test_SelectLongArray() throws Exception {
+
+ createArtistsDataSet();
+
+ List<Long> ids = SQLSelect.scalarQuery(Long.class, "SELECT ARTIST_ID FROM ARTIST ORDER BY ARTIST_ID").select(
+ context);
+
+ assertEquals(20, ids.size());
+ assertEquals(2l, ids.get(1).longValue());
+ }
+
+ public void test_SelectCount() throws Exception {
+
+ createArtistsDataSet();
+
+ int c = SQLSelect.scalarQuery(Integer.class, "SELECT #result('COUNT(*)' 'int') FROM ARTIST").selectOne(context);
+
+ assertEquals(20, c);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectTest.java
deleted file mode 100644
index 3f4317a..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.query;
-
-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.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class SQLSelectTest 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));
- }
- }
-
- public void test_DataRows_DataMapNameRoot() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("tstmap", "SELECT * FROM ARTIST");
- assertTrue(q1.isFetchingDataRows());
-
- List<DataRow> result = context.select(q1);
- assertEquals(20, result.size());
- assertTrue(result.get(0) instanceof DataRow);
- }
-
- public void test_DataRows_DefaultRoot() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
- assertTrue(q1.isFetchingDataRows());
-
- List<DataRow> result = context.select(q1);
- assertEquals(20, result.size());
- assertTrue(result.get(0) instanceof DataRow);
- }
-
- public void test_DataRows_ClassRoot() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST");
- assertFalse(q1.isFetchingDataRows());
- List<Artist> result = context.select(q1);
- assertEquals(20, result.size());
- assertTrue(result.get(0) instanceof Artist);
- }
-
- public void test_DataRows_ClassRoot_Parameters() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)");
- q1.getParameters().put("a", "artist3");
-
- assertFalse(q1.isFetchingDataRows());
- Artist a = context.selectOne(q1);
- assertEquals("artist3", a.getArtistName());
- }
-
- public void test_DataRows_ClassRoot_Bind() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<Artist> q1 = SQLSelect.query(Artist.class,
- "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a) OR ARTIST_NAME = #bind($b)");
- q1.params("a", "artist3").params("b", "artist4");
-
- List<Artist> result = context.select(q1);
- assertEquals(2, result.size());
- }
-
- public void test_DataRows_ColumnNameCaps() throws Exception {
-
- SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST WHERE ARTIST_NAME = 'artist2'");
- q1.upperColumnNames();
-
- SQLTemplate r1 = (SQLTemplate) q1.getReplacementQuery(context.getEntityResolver());
- assertEquals(CapsStrategy.UPPER, r1.getColumnNamesCapitalization());
-
- q1.lowerColumnNames();
- SQLTemplate r2 = (SQLTemplate) q1.getReplacementQuery(context.getEntityResolver());
- assertEquals(CapsStrategy.LOWER, r2.getColumnNamesCapitalization());
- }
-
- public void test_DataRows_FetchLimit() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
- q1.limit(5);
-
- assertEquals(5, context.select(q1).size());
- }
-
- public void test_DataRows_FetchOffset() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<DataRow> q1 = SQLSelect.dataRowQuery("SELECT * FROM ARTIST");
- q1.offset(4);
-
- assertEquals(16, context.select(q1).size());
- }
-
- public void test_Append() throws Exception {
-
- createArtistsDataSet();
-
- SQLSelect<Artist> q1 = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST")
- .append(" WHERE ARTIST_NAME = #bind($a)").params("a", "artist3");
-
- List<Artist> result = context.select(q1);
- assertEquals(1, result.size());
- }
-
- public void test_Select() throws Exception {
-
- createArtistsDataSet();
-
- List<Artist> result = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
- .params("a", "artist3").select(context);
-
- assertEquals(1, result.size());
- }
-
- public void test_SelectOne() throws Exception {
-
- createArtistsDataSet();
-
- Artist a = SQLSelect.query(Artist.class, "SELECT * FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
- .params("a", "artist3").selectOne(context);
-
- assertEquals("artist3", a.getArtistName());
- }
-
- public void test_SelectLong() throws Exception {
-
- createArtistsDataSet();
-
- long id = SQLSelect.scalarQuery(Long.class, "SELECT ARTIST_ID FROM ARTIST WHERE ARTIST_NAME = #bind($a)")
- .params("a", "artist3").selectOne(context);
-
- assertEquals(3l, id);
- }
-
- public void test_SelectLongArray() throws Exception {
-
- createArtistsDataSet();
-
- List<Long> ids = SQLSelect.scalarQuery(Long.class, "SELECT ARTIST_ID FROM ARTIST ORDER BY ARTIST_ID").select(
- context);
-
- assertEquals(20, ids.size());
- assertEquals(2l, ids.get(1).longValue());
- }
-
- public void test_SelectCount() throws Exception {
-
- createArtistsDataSet();
-
- int c = SQLSelect.scalarQuery(Integer.class, "SELECT #result('COUNT(*)' 'int') FROM ARTIST").selectOne(context);
-
- assertEquals(20, c);
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyIT.java
new file mode 100644
index 0000000..3a8c440
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyIT.java
@@ -0,0 +1,96 @@
+/*****************************************************************
+ * 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.di.Inject;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class SQLTemplateCacheKeyIT extends ServerCase {
+
+ @Inject
+ private EntityResolver resolver;
+
+ public void testNoCache() {
+
+ SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.NO_CACHE, md1.getCacheStrategy());
+ assertNull(md1.getCacheKey());
+
+ query.setName("XYZ");
+ QueryMetadata md2 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.NO_CACHE, md2.getCacheStrategy());
+ assertNull(md2.getCacheKey());
+ }
+
+ public void testLocalCache() {
+
+ SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
+
+ query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.LOCAL_CACHE, md1.getCacheStrategy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testSharedCache() {
+
+ SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
+
+ query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testNamedQuery() {
+
+ SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
+
+ query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+ query.setName("XYZ");
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
+ assertFalse("XYZ".equals(md1.getCacheKey()));
+ }
+
+ public void testCacheFetchLimitAndOffset() {
+ SQLTemplate q1 = new SQLTemplate(Artist.class, "SELECT ME");
+ q1.setFetchOffset(5);
+ q1.setFetchLimit(10);
+ q1.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+
+ SQLTemplate q2 = new SQLTemplate(Artist.class, "SELECT ME");
+ q2.setFetchOffset(5);
+ q2.setFetchLimit(10);
+ q2.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
+
+ assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+ .getMetaData(resolver)
+ .getCacheKey());
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyTest.java
deleted file mode 100644
index d0f07dc..0000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateCacheKeyTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-package org.apache.cayenne.query;
-
-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.ServerCase;
-import org.apache.cayenne.unit.di.server.UseServerRuntime;
-
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
-public class SQLTemplateCacheKeyTest extends ServerCase {
-
- @Inject
- private EntityResolver resolver;
-
- public void testNoCache() {
-
- SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.NO_CACHE, md1.getCacheStrategy());
- assertNull(md1.getCacheKey());
-
- query.setName("XYZ");
- QueryMetadata md2 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.NO_CACHE, md2.getCacheStrategy());
- assertNull(md2.getCacheKey());
- }
-
- public void testLocalCache() {
-
- SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
-
- query.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.LOCAL_CACHE, md1.getCacheStrategy());
- assertNotNull(md1.getCacheKey());
- }
-
- public void testSharedCache() {
-
- SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
-
- query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
- assertNotNull(md1.getCacheKey());
- }
-
- public void testNamedQuery() {
-
- SQLTemplate query = new SQLTemplate(Artist.class, "SELECT ME");
-
- query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
- query.setName("XYZ");
-
- QueryMetadata md1 = query.getMetaData(resolver);
- assertEquals(QueryCacheStrategy.SHARED_CACHE, md1.getCacheStrategy());
- assertFalse("XYZ".equals(md1.getCacheKey()));
- }
-
- public void testCacheFetchLimitAndOffset() {
- SQLTemplate q1 = new SQLTemplate(Artist.class, "SELECT ME");
- q1.setFetchOffset(5);
- q1.setFetchLimit(10);
- q1.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
-
- SQLTemplate q2 = new SQLTemplate(Artist.class, "SELECT ME");
- q2.setFetchOffset(5);
- q2.setFetchLimit(10);
- q2.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
-
- assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
- .getMetaData(resolver)
- .getCacheKey());
- }
-}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e42c376c/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateIT.java
new file mode 100644
index 0000000..95d2951
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLTemplateIT.java
@@ -0,0 +1,211 @@
+/*****************************************************************
+ * 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 java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.DataRow;
+import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.apache.cayenne.util.Util;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class SQLTemplateIT 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");
+ }
+
+ public void testSQLTemplateForDataMap() {
+ DataMap testDataMap = context.getEntityResolver().getDataMap("tstmap");
+ SQLTemplate q1 = new SQLTemplate(testDataMap, "SELECT * FROM ARTIST", true);
+ List<DataRow> result = context.performQuery(q1);
+ assertEquals(0, result.size());
+ }
+
+ public void testSQLTemplateForDataMapWithInsert() {
+ DataMap testDataMap = context.getEntityResolver().getDataMap("tstmap");
+ String sql = "INSERT INTO ARTIST VALUES (15, 'Surikov', null)";
+ SQLTemplate q1 = new SQLTemplate(testDataMap, sql, true);
+ context.performNonSelectingQuery(q1);
+
+ SQLTemplate q2 = new SQLTemplate(testDataMap, "SELECT * FROM ARTIST", true);
+ List<DataRow> result = context.performQuery(q2);
+ assertEquals(1, result.size());
+ }
+
+ public void testSQLTemplateForDataMapWithInsertException() {
+ DataMap testDataMap = context.getEntityResolver().getDataMap("tstmap");
+ String sql = "INSERT INTO ARTIST VALUES (15, 'Surikov', null)";
+ SQLTemplate q1 = new SQLTemplate(testDataMap, sql, true);
+ context.performNonSelectingQuery(q1);
+
+ SQLTemplate q2 = new SQLTemplate(testDataMap, "SELECT * FROM ARTIST", false);
+ boolean gotRuntimeException = false;
+ try {
+ context.performQuery(q2);
+ } catch (CayenneRuntimeException e) {
+ gotRuntimeException = true;
+ }
+ assertTrue("If fetchingDataRows is false and ObjectEntity not set, shoulb be thrown exception",
+ gotRuntimeException);
+ }
+
+ public void testColumnNameCapitalization() {
+ SQLTemplate q1 = new SQLTemplate("E1", "SELECT");
+ assertSame(CapsStrategy.DEFAULT, q1.getColumnNamesCapitalization());
+ q1.setColumnNamesCapitalization(CapsStrategy.UPPER);
+ assertEquals(CapsStrategy.UPPER, q1.getColumnNamesCapitalization());
+ }
+
+ public void testQueryWithParameters() {
+ SQLTemplate q1 = new SQLTemplate("E1", "SELECT");
+ q1.setName("QName");
+
+ Query q2 = q1.queryWithParameters(Collections.EMPTY_MAP);
+ assertNotNull(q2);
+ assertNotSame(q1, q2);
+ assertTrue(q2 instanceof SQLTemplate);
+
+ assertNull(q2.getName());
+
+ Query q3 = q1.queryWithParameters(Collections.singletonMap("a", "b"));
+ assertNotNull(q3);
+ assertNotSame(q1, q3);
+ assertNull(q3.getName());
+ assertFalse(q1.getName().equals(q3.getName()));
+
+ Query q4 = q1.queryWithParameters(Collections.singletonMap("a", "b"));
+ assertNotNull(q4);
+ assertNotSame(q3, q4);
+ assertEquals(q3.getName(), q4.getName());
+ }
+
+ public void testSerializability() throws Exception {
+ SQLTemplate o = new SQLTemplate("Test", "DO SQL");
+ Object clone = Util.cloneViaSerialization(o);
+
+ assertTrue(clone instanceof SQLTemplate);
+ SQLTemplate c1 = (SQLTemplate) clone;
+
+ assertNotSame(o, c1);
+ assertEquals(o.getRoot(), c1.getRoot());
+ assertEquals(o.getDefaultTemplate(), c1.getDefaultTemplate());
+ }
+
+ public void testGetDefaultTemplate() {
+ SQLTemplate query = new SQLTemplate();
+ query.setDefaultTemplate("AAA # BBB");
+ assertEquals("AAA # BBB", query.getDefaultTemplate());
+ }
+
+ public void testGetTemplate() {
+ SQLTemplate query = new SQLTemplate();
+
+ // no template for key, no default template... must be null
+ assertNull(query.getTemplate("key1"));
+
+ // no template for key, must return default
+ query.setDefaultTemplate("AAA # BBB");
+ assertEquals("AAA # BBB", query.getTemplate("key1"));
+
+ // must find template
+ query.setTemplate("key1", "XYZ");
+ assertEquals("XYZ", query.getTemplate("key1"));
+
+ // add another template.. still must find
+ query.setTemplate("key2", "123");
+ assertEquals("XYZ", query.getTemplate("key1"));
+ assertEquals("123", query.getTemplate("key2"));
+ }
+
+ public void testSingleParameterSet() throws Exception {
+ SQLTemplate query = new SQLTemplate();
+
+ assertNotNull(query.getParameters());
+ assertTrue(query.getParameters().isEmpty());
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("a", "b");
+
+ query.setParameters(params);
+ assertEquals(params, query.getParameters());
+ Iterator<?> it = query.parametersIterator();
+ assertTrue(it.hasNext());
+ assertEquals(params, it.next());
+ assertFalse(it.hasNext());
+
+ query.setParameters(null);
+ assertNotNull(query.getParameters());
+ assertTrue(query.getParameters().isEmpty());
+ it = query.parametersIterator();
+ assertFalse(it.hasNext());
+ }
+
+ public void testBatchParameterSet() throws Exception {
+ SQLTemplate query = new SQLTemplate();
+
+ assertNotNull(query.getParameters());
+ assertTrue(query.getParameters().isEmpty());
+
+ Map<String, Object> params1 = new HashMap<String, Object>();
+ params1.put("a", "b");
+
+ Map<String, Object> params2 = new HashMap<String, Object>();
+ params2.put("1", "2");
+
+ query.setParameters(new Map[] { params1, params2, null });
+ assertEquals(params1, query.getParameters());
+ Iterator<?> it = query.parametersIterator();
+ assertTrue(it.hasNext());
+ assertEquals(params1, it.next());
+ assertTrue(it.hasNext());
+ assertEquals(params2, it.next());
+ assertTrue(it.hasNext());
+ assertTrue(((Map<String, Object>) it.next()).isEmpty());
+ assertFalse(it.hasNext());
+
+ query.setParameters((Map[]) null);
+ assertNotNull(query.getParameters());
+ assertTrue(query.getParameters().isEmpty());
+ it = query.parametersIterator();
+ assertFalse(it.hasNext());
+ }
+}