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/15 11:01:30 UTC

[1/2] cayenne git commit: refactoring, cleanup

Repository: cayenne
Updated Branches:
  refs/heads/master e787265f8 -> 7c852a5af


refactoring, cleanup

* cleanup cache key generation flow for SelectQuery
* do not generate cache key for null cache strategy


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

Branch: refs/heads/master
Commit: 8ed6a07b2720fdba06d06bc862b936c6eec56b1c
Parents: e787265
Author: aadamchik <aa...@apache.org>
Authored: Sat Nov 15 12:58:07 2014 +0300
Committer: aadamchik <aa...@apache.org>
Committed: Sat Nov 15 12:58:07 2014 +0300

----------------------------------------------------------------------
 .../cayenne/query/SelectQueryMetadata.java      | 261 ++++++++++---------
 .../org/apache/cayenne/query/SelectByIdIT.java  |  25 +-
 2 files changed, 147 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/8ed6a07b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
index 0367ac4..a05c987 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
@@ -33,131 +33,138 @@ import org.apache.cayenne.map.ObjEntity;
  */
 class SelectQueryMetadata extends BaseQueryMetadata {
 
-    Map<String, String> pathSplitAliases;
-
-    @Override
-    void copyFromInfo(QueryMetadata info) {
-        super.copyFromInfo(info);
-        this.pathSplitAliases = new HashMap<String, String>(info.getPathSplitAliases());
-    }
-
-    <T> boolean resolve(Object root, EntityResolver resolver, SelectQuery<T> query) {
-
-        if (super.resolve(root, resolver, null)) {
-
-            // generate unique cache key...
-            if (QueryCacheStrategy.NO_CACHE == getCacheStrategy()) {
-
-            } else {
-                // create a unique key based on entity, qualifier, ordering and
-                // fetch offset and limit
-
-                StringBuilder key = new StringBuilder();
-
-                ObjEntity entity = getObjEntity();
-                if (entity != null) {
-                    key.append(entity.getName());
-                } else if (dbEntity != null) {
-                    key.append("db:").append(dbEntity.getName());
-                }
-
-                if (query.getQualifier() != null) {
-                    key.append('/');
-                    try {
-                        query.getQualifier().appendAsString(key);
-                    } catch (IOException e) {
-                        throw new CayenneRuntimeException("Unexpected IO Exception appending to StringBuilder", e);
-                    }
-                }
-
-                if (!query.getOrderings().isEmpty()) {
-                    for (Ordering o : query.getOrderings()) {
-                        key.append('/').append(o.getSortSpecString());
-                        if (!o.isAscending()) {
-                            key.append(":d");
-                        }
-
-                        if (o.isCaseInsensitive()) {
-                            key.append(":i");
-                        }
-                    }
-                }
-
-                if (query.getFetchOffset() > 0 || query.getFetchLimit() > 0) {
-                    key.append('/');
-                    if (query.getFetchOffset() > 0) {
-                        key.append('o').append(query.getFetchOffset());
-                    }
-                    if (query.getFetchLimit() > 0) {
-                        key.append('l').append(query.getFetchLimit());
-                    }
-                }
-
-                this.cacheKey = key.toString();
-            }
-
-            resolveAutoAliases(query);
-
-            return true;
-        }
-
-        return false;
-    }
-
-    private <T> void resolveAutoAliases(SelectQuery<T> query) {
-        Expression qualifier = query.getQualifier();
-        if (qualifier != null) {
-            resolveAutoAliases(qualifier);
-        }
-
-        // TODO: include aliases in prefetches? flattened attributes?
-    }
-
-    private void resolveAutoAliases(Expression expression) {
-        Map<String, String> aliases = expression.getPathAliases();
-        if (!aliases.isEmpty()) {
-            if (pathSplitAliases == null) {
-                pathSplitAliases = new HashMap<String, String>();
-            }
-
-            pathSplitAliases.putAll(aliases);
-        }
-
-        int len = expression.getOperandCount();
-        for (int i = 0; i < len; i++) {
-            Object operand = expression.getOperand(i);
-            if (operand instanceof Expression) {
-                resolveAutoAliases((Expression) operand);
-            }
-        }
-    }
-
-    /**
-     * @since 3.0
-     */
-    @Override
-    public Map<String, String> getPathSplitAliases() {
-        return pathSplitAliases != null ? pathSplitAliases : Collections.<String, String> emptyMap();
-    }
-
-    /**
-     * @since 3.0
-     */
-    public void addPathSplitAliases(String path, String... aliases) {
-        if (aliases == null) {
-            throw new NullPointerException("Null aliases");
-        }
-
-        if (aliases.length == 0) {
-            throw new IllegalArgumentException("No aliases specified");
-        }
-
-        if (pathSplitAliases == null) {
-            pathSplitAliases = new HashMap<String, String>();
-        }
-
-        for (String alias : aliases) {
-            pathSplitAliases.put(alias, path);
-        }
-    }
+	private static final long serialVersionUID = 7465922769303943945L;
+	
+	Map<String, String> pathSplitAliases;
+
+	@Override
+	void copyFromInfo(QueryMetadata info) {
+		super.copyFromInfo(info);
+		this.pathSplitAliases = new HashMap<String, String>(info.getPathSplitAliases());
+	}
+
+	<T> boolean resolve(Object root, EntityResolver resolver, SelectQuery<T> query) {
+
+		if (super.resolve(root, resolver, null)) {
+
+			// generate unique cache key, but only if we are caching..
+
+			if (cacheStrategy != null && cacheStrategy != QueryCacheStrategy.NO_CACHE) {
+				this.cacheKey = makeCacheKey(query);
+			}
+
+			resolveAutoAliases(query);
+
+			return true;
+		}
+
+		return false;
+	}
+
+	private String makeCacheKey(SelectQuery<?> query) {
+
+		// create a unique key based on entity, qualifier, ordering and
+		// fetch offset and limit
+
+		StringBuilder key = new StringBuilder();
+
+		ObjEntity entity = getObjEntity();
+		if (entity != null) {
+			key.append(entity.getName());
+		} else if (dbEntity != null) {
+			key.append("db:").append(dbEntity.getName());
+		}
+
+		if (query.getQualifier() != null) {
+			key.append('/');
+			try {
+				query.getQualifier().appendAsString(key);
+			} catch (IOException e) {
+				throw new CayenneRuntimeException("Unexpected IO Exception appending to StringBuilder", e);
+			}
+		}
+
+		if (!query.getOrderings().isEmpty()) {
+			for (Ordering o : query.getOrderings()) {
+				key.append('/').append(o.getSortSpecString());
+				if (!o.isAscending()) {
+					key.append(":d");
+				}
+
+				if (o.isCaseInsensitive()) {
+					key.append(":i");
+				}
+			}
+		}
+
+		if (query.getFetchOffset() > 0 || query.getFetchLimit() > 0) {
+			key.append('/');
+			if (query.getFetchOffset() > 0) {
+				key.append('o').append(query.getFetchOffset());
+			}
+			if (query.getFetchLimit() > 0) {
+				key.append('l').append(query.getFetchLimit());
+			}
+		}
+
+		return key.toString();
+
+	}
+
+	private <T> void resolveAutoAliases(SelectQuery<T> query) {
+		Expression qualifier = query.getQualifier();
+		if (qualifier != null) {
+			resolveAutoAliases(qualifier);
+		}
+
+		// TODO: include aliases in prefetches? flattened attributes?
+	}
+
+	private void resolveAutoAliases(Expression expression) {
+		Map<String, String> aliases = expression.getPathAliases();
+		if (!aliases.isEmpty()) {
+			if (pathSplitAliases == null) {
+				pathSplitAliases = new HashMap<String, String>();
+			}
+
+			pathSplitAliases.putAll(aliases);
+		}
+
+		int len = expression.getOperandCount();
+		for (int i = 0; i < len; i++) {
+			Object operand = expression.getOperand(i);
+			if (operand instanceof Expression) {
+				resolveAutoAliases((Expression) operand);
+			}
+		}
+	}
+
+	/**
+	 * @since 3.0
+	 */
+	@Override
+	public Map<String, String> getPathSplitAliases() {
+		return pathSplitAliases != null ? pathSplitAliases : Collections.<String, String> emptyMap();
+	}
+
+	/**
+	 * @since 3.0
+	 */
+	public void addPathSplitAliases(String path, String... aliases) {
+		if (aliases == null) {
+			throw new NullPointerException("Null aliases");
+		}
+
+		if (aliases.length == 0) {
+			throw new IllegalArgumentException("No aliases specified");
+		}
+
+		if (pathSplitAliases == null) {
+			pathSplitAliases = new HashMap<String, String>();
+		}
+
+		for (String alias : aliases) {
+			pathSplitAliases.put(alias, path);
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8ed6a07b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
index f4e8ef8..bd5a623 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
@@ -72,7 +72,7 @@ public class SelectByIdIT extends ServerCase {
 		tArtist.insert(3, "artist3");
 	}
 
-    @Test
+	@Test
 	public void testIntPk() throws Exception {
 		createTwoArtists();
 
@@ -85,7 +85,7 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals("artist2", a2.getArtistName());
 	}
 
-    @Test
+	@Test
 	public void testMapPk() throws Exception {
 		createTwoArtists();
 
@@ -98,7 +98,7 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals("artist2", a2.getArtistName());
 	}
 
-    @Test
+	@Test
 	public void testObjectIdPk() throws Exception {
 		createTwoArtists();
 
@@ -113,7 +113,7 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals("artist2", a2.getArtistName());
 	}
 
-    @Test
+	@Test
 	public void testDataRowIntPk() throws Exception {
 		createTwoArtists();
 
@@ -126,14 +126,15 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals("artist2", a2.get("ARTIST_NAME"));
 	}
 
-    @Test
+	@Test
 	public void testMetadataCacheKey() throws Exception {
-		SelectById<Painting> q1 = SelectById.query(Painting.class, 4);
+		SelectById<Painting> q1 = SelectById.query(Painting.class, 4).useLocalCache();
 		QueryMetadata md1 = q1.getMetaData(context.getEntityResolver());
 		assertNotNull(md1);
 		assertNotNull(md1.getCacheKey());
 
-		SelectById<Painting> q2 = SelectById.query(Painting.class, singletonMap(Painting.PAINTING_ID_PK_COLUMN, 4));
+		SelectById<Painting> q2 = SelectById.query(Painting.class, singletonMap(Painting.PAINTING_ID_PK_COLUMN, 4))
+				.useLocalCache();
 		QueryMetadata md2 = q2.getMetaData(context.getEntityResolver());
 		assertNotNull(md2);
 		assertNotNull(md2.getCacheKey());
@@ -142,20 +143,20 @@ public class SelectByIdIT extends ServerCase {
 		// cache entry
 		assertEquals(md1.getCacheKey(), md2.getCacheKey());
 
-		SelectById<Painting> q3 = SelectById.query(Painting.class, 5);
+		SelectById<Painting> q3 = SelectById.query(Painting.class, 5).useLocalCache();
 		QueryMetadata md3 = q3.getMetaData(context.getEntityResolver());
 		assertNotNull(md3);
 		assertNotNull(md3.getCacheKey());
 		assertNotEquals(md1.getCacheKey(), md3.getCacheKey());
 
-		SelectById<Artist> q4 = SelectById.query(Artist.class, 4);
+		SelectById<Artist> q4 = SelectById.query(Artist.class, 4).useLocalCache();
 		QueryMetadata md4 = q4.getMetaData(context.getEntityResolver());
 		assertNotNull(md4);
 		assertNotNull(md4.getCacheKey());
 		assertNotEquals(md1.getCacheKey(), md4.getCacheKey());
 
-		SelectById<Painting> q5 = SelectById.query(Painting.class, new ObjectId("Painting",
-				Painting.PAINTING_ID_PK_COLUMN, 4));
+		SelectById<Painting> q5 = SelectById.query(Painting.class,
+				new ObjectId("Painting", Painting.PAINTING_ID_PK_COLUMN, 4)).useLocalCache();
 		QueryMetadata md5 = q5.getMetaData(context.getEntityResolver());
 		assertNotNull(md5);
 		assertNotNull(md5.getCacheKey());
@@ -165,7 +166,7 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals(md1.getCacheKey(), md5.getCacheKey());
 	}
 
-    @Test
+	@Test
 	public void testLocalCache() throws Exception {
 		createTwoArtists();
 


[2/2] cayenne git commit: unit test cleanup

Posted by aa...@apache.org.
unit test cleanup


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

Branch: refs/heads/master
Commit: 7c852a5af9abce2f98432903de368f449e942f67
Parents: 8ed6a07
Author: aadamchik <aa...@apache.org>
Authored: Sat Nov 15 12:59:23 2014 +0300
Committer: aadamchik <aa...@apache.org>
Committed: Sat Nov 15 12:59:23 2014 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/query/SelectByIdIT.java   | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/7c852a5a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
index bd5a623..0c9cec7 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectByIdIT.java
@@ -22,6 +22,7 @@ import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.di.Inject;
+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;
@@ -52,6 +53,9 @@ public class SelectByIdIT extends ServerCase {
 	@Inject
 	private ObjectContext context;
 
+	@Inject
+	private EntityResolver resolver;
+
 	@Override
 	protected void setUpAfterInjection() throws Exception {
 		dbHelper.deleteAll("PAINTING_INFO");
@@ -129,13 +133,13 @@ public class SelectByIdIT extends ServerCase {
 	@Test
 	public void testMetadataCacheKey() throws Exception {
 		SelectById<Painting> q1 = SelectById.query(Painting.class, 4).useLocalCache();
-		QueryMetadata md1 = q1.getMetaData(context.getEntityResolver());
+		QueryMetadata md1 = q1.getMetaData(resolver);
 		assertNotNull(md1);
 		assertNotNull(md1.getCacheKey());
 
 		SelectById<Painting> q2 = SelectById.query(Painting.class, singletonMap(Painting.PAINTING_ID_PK_COLUMN, 4))
 				.useLocalCache();
-		QueryMetadata md2 = q2.getMetaData(context.getEntityResolver());
+		QueryMetadata md2 = q2.getMetaData(resolver);
 		assertNotNull(md2);
 		assertNotNull(md2.getCacheKey());
 
@@ -144,20 +148,20 @@ public class SelectByIdIT extends ServerCase {
 		assertEquals(md1.getCacheKey(), md2.getCacheKey());
 
 		SelectById<Painting> q3 = SelectById.query(Painting.class, 5).useLocalCache();
-		QueryMetadata md3 = q3.getMetaData(context.getEntityResolver());
+		QueryMetadata md3 = q3.getMetaData(resolver);
 		assertNotNull(md3);
 		assertNotNull(md3.getCacheKey());
 		assertNotEquals(md1.getCacheKey(), md3.getCacheKey());
 
 		SelectById<Artist> q4 = SelectById.query(Artist.class, 4).useLocalCache();
-		QueryMetadata md4 = q4.getMetaData(context.getEntityResolver());
+		QueryMetadata md4 = q4.getMetaData(resolver);
 		assertNotNull(md4);
 		assertNotNull(md4.getCacheKey());
 		assertNotEquals(md1.getCacheKey(), md4.getCacheKey());
 
 		SelectById<Painting> q5 = SelectById.query(Painting.class,
 				new ObjectId("Painting", Painting.PAINTING_ID_PK_COLUMN, 4)).useLocalCache();
-		QueryMetadata md5 = q5.getMetaData(context.getEntityResolver());
+		QueryMetadata md5 = q5.getMetaData(resolver);
 		assertNotNull(md5);
 		assertNotNull(md5.getCacheKey());