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/07/31 18:31:50 UTC
svn commit: r427157 - in
/incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src:
main/java/org/apache/cayenne/query/ test/java/org/apache/cayenne/query/
Author: aadamchik
Date: Mon Jul 31 09:31:49 2006
New Revision: 427157
URL: http://svn.apache.org/viewvc?rev=427157&view=rev
Log:
CAY-613 - genertaing cache key automatically for select queries
Added:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTst.java
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQuery.java
Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQuery.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQuery.java?rev=427157&r1=427156&r2=427157&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQuery.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQuery.java Mon Jul 31 09:31:49 2006
@@ -57,7 +57,7 @@
protected Expression parentQualifier;
protected String parentObjEntityName;
- BaseQueryMetadata selectInfo = new BaseQueryMetadata();
+ SelectQueryMetadata selectInfo = new SelectQueryMetadata();
/** Creates an empty SelectQuery. */
public SelectQuery() {
@@ -148,7 +148,7 @@
* @since 1.2
*/
public QueryMetadata getMetaData(EntityResolver resolver) {
- selectInfo.resolve(root, resolver, getName());
+ selectInfo.resolve(root, resolver, this);
// must force DataRows if custom attributes are fetched
if (isFetchingCustomAttributes()) {
Added: incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java?rev=427157&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java (added)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java Mon Jul 31 09:31:49 2006
@@ -0,0 +1,81 @@
+/*****************************************************************
+ * 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.Iterator;
+
+import org.apache.cayenne.map.EntityResolver;
+
+/**
+ * @since 3.0
+ * @author Andrus Adamchik
+ */
+class SelectQueryMetadata extends BaseQueryMetadata {
+
+ boolean resolve(Object root, EntityResolver resolver, SelectQuery query) {
+
+ if (super.resolve(root, resolver, null)) {
+
+ // generate unique cache key...
+ if (QueryMetadata.NO_CACHE.equals(getCachePolicy())) {
+
+ }
+ else if (query.getName() != null) {
+ this.cacheKey = query.getName();
+ }
+ else {
+ // create a unique key based on entity, qualifier and ordering
+
+ StringBuffer key = new StringBuffer();
+ if (objEntity != null) {
+ key.append(objEntity.getName());
+ }
+ else if (dbEntity != null) {
+ key.append("db:").append(dbEntity.getName());
+ }
+
+ if (query.getQualifier() != null) {
+ key.append('/').append(query.getQualifier());
+ }
+
+ if (!query.getOrderings().isEmpty()) {
+ Iterator it = query.getOrderings().iterator();
+ while (it.hasNext()) {
+
+ Ordering o = (Ordering) it.next();
+ key.append('/').append(o.getSortSpecString());
+ if (!o.isAscending()) {
+ key.append(":d");
+ }
+
+ if (o.isCaseInsensitive()) {
+ key.append(":i");
+ }
+ }
+ }
+
+ this.cacheKey = key.toString();
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+}
Added: incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTst.java?rev=427157&view=auto
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTst.java (added)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4-core/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTst.java Mon Jul 31 09:31:49 2006
@@ -0,0 +1,77 @@
+/*****************************************************************
+ * 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.art.Artist;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.unit.CayenneTestCase;
+
+public class SelectQueryCacheKeyTst extends CayenneTestCase {
+
+ public void testNoCache() {
+
+ EntityResolver resolver = getDomain().getEntityResolver();
+
+ SelectQuery query = new SelectQuery(Artist.class);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryMetadata.NO_CACHE, md1.getCachePolicy());
+ assertNull(md1.getCacheKey());
+ }
+
+ public void testLocalCache() {
+
+ EntityResolver resolver = getDomain().getEntityResolver();
+
+ SelectQuery query = new SelectQuery(Artist.class);
+
+ query.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryMetadata.LOCAL_CACHE, md1.getCachePolicy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testSharedCache() {
+
+ EntityResolver resolver = getDomain().getEntityResolver();
+
+ SelectQuery query = new SelectQuery(Artist.class);
+
+ query.setCachePolicy(QueryMetadata.SHARED_CACHE);
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryMetadata.SHARED_CACHE, md1.getCachePolicy());
+ assertNotNull(md1.getCacheKey());
+ }
+
+ public void testNamedQuery() {
+
+ EntityResolver resolver = getDomain().getEntityResolver();
+
+ SelectQuery query = new SelectQuery(Artist.class);
+
+ query.setCachePolicy(QueryMetadata.SHARED_CACHE);
+ query.setName("XYZ");
+
+ QueryMetadata md1 = query.getMetaData(resolver);
+ assertEquals(QueryMetadata.SHARED_CACHE, md1.getCachePolicy());
+ assertEquals("XYZ", md1.getCacheKey());
+ }
+}