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 2006/06/16 08:47:28 UTC
svn commit: r414755 - in
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src:
cayenne/java/org/objectstyle/cayenne/query/
tests/java/org/objectstyle/cayenne/map/
tests/java/org/objectstyle/cayenne/query/
Author: aadamchik
Date: Thu Jun 15 23:47:27 2006
New Revision: 414755
URL: http://svn.apache.org/viewvc?rev=414755&view=rev
Log:
SQLTemplate.queryWithParameters() looses cache key (I can't log in to Jira due to Apache network problems; I will enter the bug once this is resolved)
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/query/SQLTemplate.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/map/MapLoaderLoadTst.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/query/SQLTemplateTst.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/query/SQLTemplate.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/query/SQLTemplate.java?rev=414755&r1=414754&r2=414755&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/query/SQLTemplate.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/query/SQLTemplate.java Thu Jun 15 23:47:27 2006
@@ -70,6 +70,7 @@
import org.objectstyle.cayenne.map.ObjEntity;
import org.objectstyle.cayenne.map.Procedure;
import org.objectstyle.cayenne.map.QueryBuilder;
+import org.objectstyle.cayenne.util.Util;
import org.objectstyle.cayenne.util.XMLEncoder;
import org.objectstyle.cayenne.util.XMLSerializable;
@@ -389,9 +390,24 @@
query.selectInfo.copyFromInfo(this.selectInfo);
query.setParameters(parameters);
- // TODO: implement algorithm for building the name based on the original name and
- // the hashcode of the map of parameters. This way query clone can take advantage
- // of caching.
+ // The following algorithm is for building the new query name based
+ // on the original query name and a hashcode of the map of parameters.
+ // This way the query clone can take advantage of caching. Fixes
+ // problem reported in CAY-360.
+
+ if (!Util.isEmptyString(name)) {
+ StringBuffer buffer = new StringBuffer(name);
+
+ if (parameters != null) {
+ for (int i = 0; i < parameters.length; i++) {
+ if (!parameters[i].isEmpty()) {
+ buffer.append(parameters[i].hashCode());
+ }
+ }
+ }
+
+ query.setName(buffer.toString());
+ }
return query;
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/map/MapLoaderLoadTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/map/MapLoaderLoadTst.java?rev=414755&r1=414754&r2=414755&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/map/MapLoaderLoadTst.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/map/MapLoaderLoadTst.java Thu Jun 15 23:47:27 2006
@@ -62,6 +62,7 @@
import org.objectstyle.art.Artist;
import org.objectstyle.art.Gallery;
import org.objectstyle.cayenne.query.Ordering;
+import org.objectstyle.cayenne.query.SQLTemplate;
import org.objectstyle.cayenne.query.SelectQuery;
import org.xml.sax.InputSource;
@@ -146,5 +147,9 @@
assertEquals(1, queryWithPrefetch.getPrefetchTree().nonPhantomNodes().size());
assertNotNull(queryWithPrefetch.getPrefetchTree().getNode(
Gallery.PAINTING_ARRAY_PROPERTY));
+
+ SQLTemplate nonSelectingQuery = (SQLTemplate) map.getQuery("NonSelectingQuery");
+ assertNotNull(nonSelectingQuery);
+ assertEquals("NonSelectingQuery", nonSelectingQuery.getName());
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/query/SQLTemplateTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/query/SQLTemplateTst.java?rev=414755&r1=414754&r2=414755&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/query/SQLTemplateTst.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/query/SQLTemplateTst.java Thu Jun 15 23:47:27 2006
@@ -70,6 +70,32 @@
* @author Andrei Adamchik
*/
public class SQLTemplateTst extends TestCase {
+
+ public void testQueryWithParameters() {
+ SQLTemplate q1 = new SQLTemplate("E1", "SELECT");
+ q1.setName("QName");
+ EntityResolver resolver = new EntityResolver();
+
+ Query q2 = q1.queryWithParameters(Collections.EMPTY_MAP);
+ assertNotNull(q2);
+ assertNotSame(q1, q2);
+
+ assertEquals(q1.getName(), q1.getMetaData(resolver).getCacheKey());
+ assertEquals(q1.getName(), q2.getMetaData(resolver).getCacheKey());
+
+ Query q3 = q1.queryWithParameters(Collections.singletonMap("a", "b"));
+ assertNotNull(q3);
+ assertNotSame(q1, q3);
+ assertNotNull(q3.getMetaData(resolver).getCacheKey());
+ assertFalse(q1.getName().equals(q3.getMetaData(resolver).getCacheKey()));
+
+ Query q4 = q1.queryWithParameters(Collections.singletonMap("a", "b"));
+ assertNotNull(q4);
+ assertNotSame(q3, q4);
+ assertEquals(q3.getMetaData(resolver).getCacheKey(), q4
+ .getMetaData(resolver)
+ .getCacheKey());
+ }
public void testSerializability() throws Exception {
SQLTemplate o = new SQLTemplate("Test", "DO SQL");
Re: svn commit: r414755 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src: cayenne/java/org/objectstyle/cayenne/query/ tests/java/org/objectstyle/cayenne/map/ tests/java/org/objectstyle/cayenne/query/
Posted by Andrus Adamchik <an...@objectstyle.org>.
commit comments do not count :-)
On Jun 16, 2006, at 5:06 PM, Kevin Menard wrote:
> On Fri, 16 Jun 2006 02:47:28 -0400, <aa...@apache.org> wrote:
>
>> SQLTemplate.queryWithParameters() looses cache key (I can't log in to
> ^ Caught you again!
>
> Now I'll wait until you catch something I screw up :-P Maybe I can
> try Russian.
>
> --
> Kevin
>
Re: svn commit: r414755 - in /incubator/cayenne/main/trunk/cayenne/cayenne-java/src: cayenne/java/org/objectstyle/cayenne/query/ tests/java/org/objectstyle/cayenne/map/ tests/java/org/objectstyle/cayenne/query/
Posted by Kevin Menard <km...@servprise.com>.
On Fri, 16 Jun 2006 02:47:28 -0400, <aa...@apache.org> wrote:
> SQLTemplate.queryWithParameters() looses cache key (I can't log in to
^ Caught you again!
Now I'll wait until you catch something I screw up :-P Maybe I can try
Russian.
--
Kevin