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 2015/05/11 06:42:43 UTC
[8/8] cayenne git commit: CAY-1995 | Improve Select queries API
CAY-1995 | Improve Select queries API
* removing incorrect method-level parameterization... Select<T> already
defines T at the class level
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/200ac46e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/200ac46e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/200ac46e
Branch: refs/heads/master
Commit: 200ac46e7076a6425a752204991ecb778c2680ae
Parents: 73bff10
Author: aadamchik <aa...@apache.org>
Authored: Mon May 11 01:53:44 2015 +0200
Committer: aadamchik <aa...@apache.org>
Committed: Mon May 11 01:53:44 2015 +0200
----------------------------------------------------------------------
.../org/apache/cayenne/query/ObjectSelect.java | 2 +-
.../org/apache/cayenne/query/SQLSelect.java | 58 +-
.../java/org/apache/cayenne/query/Select.java | 147 +++--
.../org/apache/cayenne/query/SelectById.java | 203 +++---
.../org/apache/cayenne/query/SelectQuery.java | 64 +-
.../cayenne/remote/IncrementalSelectQuery.java | 654 ++++++++++---------
6 files changed, 566 insertions(+), 562 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
index 515a4c5..bf1564a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
@@ -671,7 +671,7 @@ public class ObjectSelect<T> extends IndirectQuery implements Select<T> {
}
@Override
- public <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
+ public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
context.iterate((Select<T>) this, callback);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
index 1451bdb..4aaab66 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
@@ -18,6 +18,13 @@
****************************************************************/
package org.apache.cayenne.query;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ObjectContext;
@@ -28,13 +35,6 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.SQLResult;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* A selecting query based on raw SQL and featuring fluent API.
*
@@ -115,37 +115,37 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
this.pageSize = QueryMetadata.PAGE_SIZE_DEFAULT;
}
- @Override
+ @Override
public List<T> select(ObjectContext context) {
return context.select(this);
}
- @Override
+ @Override
public T selectOne(ObjectContext context) {
return context.selectOne(this);
}
- @Override
- public T selectFirst(ObjectContext context) {
- return context.selectFirst(limit(1));
- }
+ @Override
+ public T selectFirst(ObjectContext context) {
+ return context.selectFirst(limit(1));
+ }
- @Override
- public <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
- context.iterate((Select<T>) this, callback);
- }
+ @Override
+ public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
+ context.iterate((Select<T>) this, callback);
+ }
- @Override
- public ResultIterator<T> iterator(ObjectContext context) {
- return context.iterator(this);
- }
+ @Override
+ public ResultIterator<T> iterator(ObjectContext context) {
+ return context.iterator(this);
+ }
- @Override
- public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
- return context.batchIterator(this, size);
- }
+ @Override
+ public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
+ return context.batchIterator(this, size);
+ }
- public boolean isFetchingDataRows() {
+ public boolean isFetchingDataRows() {
return persistentType == null;
}
@@ -297,7 +297,7 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
* </pre>
*/
public SQLSelect<T> localCache(String... cacheGroups) {
- return cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
+ return cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
}
/**
@@ -309,8 +309,8 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
* </pre>
*/
public SQLSelect<T> sharedCache(String... cacheGroups) {
- return cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
- }
+ return cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
+ }
public QueryCacheStrategy getCacheStrategy() {
return cacheStrategy;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/query/Select.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/Select.java b/cayenne-server/src/main/java/org/apache/cayenne/query/Select.java
index b4380ba..9b58085 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/Select.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/Select.java
@@ -27,84 +27,87 @@ import org.apache.cayenne.ResultIteratorCallback;
import java.util.List;
/**
- * A common interface for grouping together different kinds of queries
- * that return results.
+ * A common interface for grouping together different kinds of queries that
+ * return results.
*/
public interface Select<T> extends Query {
- /**
- * Selects objects using provided context.
- * <p>
- * Essentially the inversion of "ObjectContext.select(Select)".
- *
- * @since 4.0
- */
- <T> List<T> select(ObjectContext context);
+ /**
+ * Selects objects using provided context.
+ * <p>
+ * Essentially the inversion of "ObjectContext.select(Select)".
+ *
+ * @since 4.0
+ */
+ List<T> select(ObjectContext context);
- /**
- * Selects a single object using provided context. The query is expected to
- * match zero or one object. It returns null if no objects were matched. If
- * query matched more than one object, {@link org.apache.cayenne.CayenneRuntimeException} is
- * thrown.
- * <p>
- * Essentially the inversion of "ObjectContext.selectOne(Select)".
- *
- * @since 4.0
- */
- <T> T selectOne(ObjectContext context);
+ /**
+ * Selects a single object using provided context. The query is expected to
+ * match zero or one object. It returns null if no objects were matched. If
+ * query matched more than one object,
+ * {@link org.apache.cayenne.CayenneRuntimeException} is thrown.
+ * <p>
+ * Essentially the inversion of "ObjectContext.selectOne(Select)".
+ *
+ * @since 4.0
+ */
+ T selectOne(ObjectContext context);
- /**
- * Selects a single object using provided context. The query itself can
- * match any number of objects, but will return only the first one. It
- * returns null if no objects were matched.
- * <p>
- * If it matched more than one object, the first object from the list is
- * returned. This makes 'selectFirst' different from
- * {@link #selectOne(ObjectContext)}, which would throw in this situation.
- * 'selectFirst' is useful e.g. when the query is ordered and we only want
- * to see the first object (e.g. "most recent news article"), etc.
- * <p>
- * Selecting the first object via "Select.selectFirst(ObjectContext)"
- * is more comprehensible than selecting via "ObjectContext.selectFirst(Select)",
- * because implementations of "Select" set fetch size limit to one.
- *
- * @since 4.0
- */
- <T> T selectFirst(ObjectContext context);
+ /**
+ * Selects a single object using provided context. The query itself can
+ * match any number of objects, but will return only the first one. It
+ * returns null if no objects were matched.
+ * <p>
+ * If it matched more than one object, the first object from the list is
+ * returned. This makes 'selectFirst' different from
+ * {@link #selectOne(ObjectContext)}, which would throw in this situation.
+ * 'selectFirst' is useful e.g. when the query is ordered and we only want
+ * to see the first object (e.g. "most recent news article"), etc.
+ * <p>
+ * Selecting the first object via "Select.selectFirst(ObjectContext)" is
+ * more comprehensible than selecting via
+ * "ObjectContext.selectFirst(Select)", because implementations of "Select"
+ * set fetch size limit to one.
+ *
+ * @since 4.0
+ */
+ T selectFirst(ObjectContext context);
- /**
- * Creates a ResultIterator based on the provided context and passes it to a
- * callback for processing. The caller does not need to worry about closing
- * the iterator. This method takes care of it.
- * <p>
- * Essentially the inversion of "ObjectContext.iterate(Select, ResultIteratorCallback)".
- *
- * @since 4.0
- */
- <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback);
+ /**
+ * Creates a ResultIterator based on the provided context and passes it to a
+ * callback for processing. The caller does not need to worry about closing
+ * the iterator. This method takes care of it.
+ * <p>
+ * Essentially the inversion of
+ * "ObjectContext.iterate(Select, ResultIteratorCallback)".
+ *
+ * @since 4.0
+ */
+ void iterate(ObjectContext context, ResultIteratorCallback<T> callback);
- /**
- * Creates a ResultIterator based on the provided context. It is usually
- * backed by an open result set and is useful for processing of large data
- * sets, preserving a constant memory footprint. The caller must wrap
- * iteration in try/finally (or try-with-resources for Java 1.7 and higher) and
- * close the ResultIterator explicitly.
- * Or use {@link #iterate(ObjectContext, ResultIteratorCallback)} as an alternative.
- * <p>
- * Essentially the inversion of "ObjectContext.iterator(Select)".
- *
- * @since 4.0
- */
- <T> ResultIterator<T> iterator(ObjectContext context);
+ /**
+ * Creates a ResultIterator based on the provided context. It is usually
+ * backed by an open result set and is useful for processing of large data
+ * sets, preserving a constant memory footprint. The caller must wrap
+ * iteration in try/finally (or try-with-resources for Java 1.7 and higher)
+ * and close the ResultIterator explicitly. Or use
+ * {@link #iterate(ObjectContext, ResultIteratorCallback)} as an
+ * alternative.
+ * <p>
+ * Essentially the inversion of "ObjectContext.iterator(Select)".
+ *
+ * @since 4.0
+ */
+ ResultIterator<T> iterator(ObjectContext context);
- /**
- * Creates a ResultBatchIterator based on the provided context and batch size. It is usually
- * backed by an open result set and is useful for processing of large data
- * sets, preserving a constant memory footprint. The caller must wrap
- * iteration in try/finally (or try-with-resources for Java 1.7 and higher) and
- * close the ResultBatchIterator explicitly.
- *
- * @since 4.0
- */
- <T> ResultBatchIterator<T> batchIterator(ObjectContext context, int size);
+ /**
+ * Creates a ResultBatchIterator based on the provided context and batch
+ * size. It is usually backed by an open result set and is useful for
+ * processing of large data sets, preserving a constant memory footprint.
+ * The caller must wrap iteration in try/finally (or try-with-resources for
+ * Java 1.7 and higher) and close the ResultBatchIterator explicitly.
+ *
+ * @since 4.0
+ */
+ ResultBatchIterator<T> batchIterator(ObjectContext context, int size);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
index 8b998e0..489537c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectById.java
@@ -18,6 +18,13 @@
****************************************************************/
package org.apache.cayenne.query;
+import static java.util.Collections.singletonMap;
+import static org.apache.cayenne.exp.ExpressionFactory.matchAllDbExp;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ObjectContext;
@@ -29,13 +36,6 @@ import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.ObjEntity;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import static java.util.Collections.singletonMap;
-import static org.apache.cayenne.exp.ExpressionFactory.matchAllDbExp;
-
/**
* A query to select single objects by id.
*
@@ -129,127 +129,126 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
}
}
+ @Override
+ public List<T> select(ObjectContext context) {
+ return context.select(this);
+ }
- @Override
- public List<T> select(ObjectContext context) {
- return context.select(this);
- }
-
- /**
- * Since we are selecting by ID, multiple matched objects likely
- * indicate a database referential integrity problem.
- */
- @Override
+ /**
+ * Since we are selecting by ID, multiple matched objects likely indicate a
+ * database referential integrity problem.
+ */
+ @Override
public T selectOne(ObjectContext context) {
return context.selectOne(this);
}
- /**
- * Since we are selecting by ID, we don't need to limit fetch size.
- * Multiple matched objects likely indicate a database referential integrity problem.
- */
- @Override
- public T selectFirst(ObjectContext context) {
- return selectFirst(context);
- }
-
- @Override
- public <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
- context.iterate((Select<T>) this, callback);
- }
-
- @Override
- public ResultIterator<T> iterator(ObjectContext context) {
- return context.iterator(this);
- }
-
- @Override
- public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
- return context.batchIterator(this, size);
- }
-
- /**
- * Instructs Cayenne to look for query results in the "local" cache when
- * running the query. This is a short-hand notation for:
- *
- * <pre>
- * query.cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
- * </pre>
- *
- * @since 4.0.M3
- */
- public SelectById<T> localCache(String... cacheGroups) {
- return cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
- }
-
- /**
- * Instructs Cayenne to look for query results in the "shared" cache when
- * running the query. This is a short-hand notation for:
- *
- * <pre>
- * query.cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
- * </pre>
- *
- * @since 4.0.M3
- */
- public SelectById<T> sharedCache(String... cacheGroups) {
- return cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
- }
-
- /**
- * Instructs Cayenne to look for query results in the "local" cache when
- * running the query. This is a short-hand notation for:
- *
- * @deprecated since 4.0.M3 use {@link #localCache(String...)}
- */
- @Deprecated
+ /**
+ * Since we are selecting by ID, we don't need to limit fetch size. Multiple
+ * matched objects likely indicate a database referential integrity problem.
+ */
+ @Override
+ public T selectFirst(ObjectContext context) {
+ return selectFirst(context);
+ }
+
+ @Override
+ public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
+ context.iterate((Select<T>) this, callback);
+ }
+
+ @Override
+ public ResultIterator<T> iterator(ObjectContext context) {
+ return context.iterator(this);
+ }
+
+ @Override
+ public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
+ return context.batchIterator(this, size);
+ }
+
+ /**
+ * Instructs Cayenne to look for query results in the "local" cache when
+ * running the query. This is a short-hand notation for:
+ *
+ * <pre>
+ * query.cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
+ * </pre>
+ *
+ * @since 4.0.M3
+ */
+ public SelectById<T> localCache(String... cacheGroups) {
+ return cacheStrategy(QueryCacheStrategy.LOCAL_CACHE, cacheGroups);
+ }
+
+ /**
+ * Instructs Cayenne to look for query results in the "shared" cache when
+ * running the query. This is a short-hand notation for:
+ *
+ * <pre>
+ * query.cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
+ * </pre>
+ *
+ * @since 4.0.M3
+ */
+ public SelectById<T> sharedCache(String... cacheGroups) {
+ return cacheStrategy(QueryCacheStrategy.SHARED_CACHE, cacheGroups);
+ }
+
+ /**
+ * Instructs Cayenne to look for query results in the "local" cache when
+ * running the query. This is a short-hand notation for:
+ *
+ * @deprecated since 4.0.M3 use {@link #localCache(String...)}
+ */
+ @Deprecated
public SelectById<T> useLocalCache(String... cacheGroups) {
- return localCache(cacheGroups);
+ return localCache(cacheGroups);
}
- /**
- * Instructs Cayenne to look for query results in the "shared" cache when
- * running the query. This is a short-hand notation for:
- *
- * @deprecated since 4.0.M3 use {@link #sharedCache(String...)}
- */
- @Deprecated
+ /**
+ * Instructs Cayenne to look for query results in the "shared" cache when
+ * running the query. This is a short-hand notation for:
+ *
+ * @deprecated since 4.0.M3 use {@link #sharedCache(String...)}
+ */
+ @Deprecated
public SelectById<T> useSharedCache(String... cacheGroups) {
- return sharedCache(cacheGroups);
+ return sharedCache(cacheGroups);
}
public QueryCacheStrategy getCacheStrategy() {
return cacheStrategy;
}
- public SelectById<T> cacheStrategy(QueryCacheStrategy strategy, String... cacheGroups) {
- if (this.cacheStrategy != strategy) {
- this.cacheStrategy = strategy;
- this.replacementQuery = null;
- }
+ public SelectById<T> cacheStrategy(QueryCacheStrategy strategy, String... cacheGroups) {
+ if (this.cacheStrategy != strategy) {
+ this.cacheStrategy = strategy;
+ this.replacementQuery = null;
+ }
- return cacheGroups(cacheGroups);
- }
+ return cacheGroups(cacheGroups);
+ }
public String[] getCacheGroups() {
return cacheGroups;
}
public SelectById<T> cacheGroups(String... cacheGroups) {
- this.cacheGroups = cacheGroups != null && cacheGroups.length > 0 ? cacheGroups : null;
- this.replacementQuery = null;
+ this.cacheGroups = cacheGroups != null && cacheGroups.length > 0 ? cacheGroups : null;
+ this.replacementQuery = null;
return this;
}
- public SelectById<T> cacheGroups(Collection<String> cacheGroups) {
+ public SelectById<T> cacheGroups(Collection<String> cacheGroups) {
- if (cacheGroups == null) {
- return cacheGroups((String) null);
- }
+ if (cacheGroups == null) {
+ return cacheGroups((String) null);
+ }
- String[] array = new String[cacheGroups.size()];
- return cacheGroups(cacheGroups.toArray(array));
- }
+ String[] array = new String[cacheGroups.size()];
+ return cacheGroups(cacheGroups.toArray(array));
+ }
public boolean isFetchingDataRows() {
return fetchingDataRows;
@@ -314,7 +313,7 @@ public class SelectById<T> extends IndirectQuery implements Select<T> {
prefetches.addPath(path).setSemantics(semantics);
return this;
}
-
+
public PrefetchTreeNode getPrefetches() {
return prefetches;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQuery.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQuery.java
index db012b3..793d3d8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQuery.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQuery.java
@@ -19,6 +19,12 @@
package org.apache.cayenne.query;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ResultBatchIterator;
@@ -34,12 +40,6 @@ import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.util.XMLEncoder;
import org.apache.cayenne.util.XMLSerializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
/**
* A query that selects persistent objects of a certain type or "raw data" (aka
* DataRows). Supports expression qualifier, multiple orderings and a number of
@@ -308,38 +308,38 @@ public class SelectQuery<T> extends AbstractQuery implements ParameterizedQuery,
this.setQualifier(qualifier);
}
- @Override
- public <T> List<T> select(ObjectContext context) {
- return context.performQuery(this);
- }
+ @Override
+ public List<T> select(ObjectContext context) {
+ return context.select(this);
+ }
- @Override
- public T selectOne(ObjectContext context) {
- return context.selectOne(this);
- }
+ @Override
+ public T selectOne(ObjectContext context) {
+ return context.selectOne(this);
+ }
- @Override
- public T selectFirst(ObjectContext context) {
- setFetchLimit(1);
- return context.selectFirst(this);
- }
+ @Override
+ public T selectFirst(ObjectContext context) {
+ setFetchLimit(1);
+ return context.selectFirst(this);
+ }
- @Override
- public <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
- context.iterate((Select<T>) this, callback);
- }
+ @Override
+ public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
+ context.iterate((Select<T>) this, callback);
+ }
- @Override
- public ResultIterator<T> iterator(ObjectContext context) {
- return context.iterator(this);
- }
+ @Override
+ public ResultIterator<T> iterator(ObjectContext context) {
+ return context.iterator(this);
+ }
- @Override
- public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
- return context.batchIterator(this, size);
- }
+ @Override
+ public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
+ return context.batchIterator(this, size);
+ }
- /**
+ /**
* @since 1.2
*/
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/200ac46e/cayenne-server/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java b/cayenne-server/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
index 7da3793..846b5d1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
@@ -18,6 +18,10 @@
****************************************************************/
package org.apache.cayenne.remote;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.ResultBatchIterator;
import org.apache.cayenne.ResultIterator;
@@ -42,336 +46,334 @@ import org.apache.cayenne.query.SortOrder;
import org.apache.cayenne.reflect.ClassDescriptor;
import org.apache.cayenne.util.XMLEncoder;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
/**
- * A SelectQuery decorator that overrides the metadata to ensure that query result is
- * cached on the server, so that subranges could be retrieved at a later time. Note that a
- * special decorator that is a subclass of SelectQuery is needed so that
- * {@link IncrementalFaultList} on the server-side could apply SelectQuery-specific
- * optimizations.
+ * A SelectQuery decorator that overrides the metadata to ensure that query
+ * result is cached on the server, so that subranges could be retrieved at a
+ * later time. Note that a special decorator that is a subclass of SelectQuery
+ * is needed so that {@link IncrementalFaultList} on the server-side could apply
+ * SelectQuery-specific optimizations.
*
* @since 3.0
*/
class IncrementalSelectQuery<T> extends SelectQuery<T> {
- private SelectQuery<T> query;
- private String cacheKey;
-
- IncrementalSelectQuery(SelectQuery<T> delegate, String cacheKey) {
- this.query = delegate;
- this.cacheKey = cacheKey;
- }
-
- @Override
- public QueryMetadata getMetaData(EntityResolver resolver) {
- final QueryMetadata metadata = query.getMetaData(resolver);
-
- // the way paginated queries work on the server is that they are never cached
- // (IncrementalFaultList interception happens before cache interception). So
- // overriding caching settings in the metadata will only affect
- // ClientServerChannel behavior
-
- return new QueryMetadata() {
-
- public Query getOrginatingQuery() {
- return null;
- }
-
- public String getCacheKey() {
- return cacheKey;
- }
-
- public List<Object> getResultSetMapping() {
- return metadata.getResultSetMapping();
- }
-
- public String[] getCacheGroups() {
- return metadata.getCacheGroups();
- }
-
- public QueryCacheStrategy getCacheStrategy() {
- return metadata.getCacheStrategy();
- }
-
- public DataMap getDataMap() {
- return metadata.getDataMap();
- }
-
- public DbEntity getDbEntity() {
- return metadata.getDbEntity();
- }
-
- public int getFetchLimit() {
- return metadata.getFetchLimit();
- }
-
- public int getFetchOffset() {
- return metadata.getFetchOffset();
- }
-
- public ObjEntity getObjEntity() {
- return metadata.getObjEntity();
- }
-
- public ClassDescriptor getClassDescriptor() {
- return metadata.getClassDescriptor();
- }
-
- public int getPageSize() {
- return metadata.getPageSize();
- }
-
- public PrefetchTreeNode getPrefetchTree() {
- return metadata.getPrefetchTree();
- }
-
- public Procedure getProcedure() {
- return metadata.getProcedure();
- }
-
- public Map<String, String> getPathSplitAliases() {
- return metadata.getPathSplitAliases();
- }
-
- public boolean isFetchingDataRows() {
- return metadata.isFetchingDataRows();
- }
-
- public boolean isRefreshingObjects() {
- return metadata.isRefreshingObjects();
- }
-
- public int getStatementFetchSize() {
- return metadata.getStatementFetchSize();
- }
- };
- }
-
- @Override
- public void addOrdering(Ordering ordering) {
- query.addOrdering(ordering);
- }
-
- @Override
- public void addOrdering(String sortPathSpec, SortOrder order) {
- query.addOrdering(sortPathSpec, order);
- }
-
- @Override
- public void addOrderings(Collection<? extends Ordering> orderings) {
- query.addOrderings(orderings);
- }
-
- @Override
- public PrefetchTreeNode addPrefetch(String prefetchPath) {
- return query.addPrefetch(prefetchPath);
- }
-
- @Override
- public void andQualifier(Expression e) {
- query.andQualifier(e);
- }
-
- @Override
- public void clearOrderings() {
- query.clearOrderings();
- }
-
- @Override
- public void clearPrefetches() {
- query.clearPrefetches();
- }
-
- @Override
- public SelectQuery<T> createQuery(Map parameters) {
- return query.createQuery(parameters);
- }
-
- @Override
- public SQLAction createSQLAction(SQLActionVisitor visitor) {
- return query.createSQLAction(visitor);
- }
-
- @Override
- public void encodeAsXML(XMLEncoder encoder) {
- query.encodeAsXML(encoder);
- }
-
- @Override
- public boolean equals(Object obj) {
- return query.equals(obj);
- }
-
- @Override
- public String[] getCacheGroups() {
- return query.getCacheGroups();
- }
-
- @Override
- public int getFetchLimit() {
- return query.getFetchLimit();
- }
-
- @Override
- public String getName() {
- return query.getName();
- }
-
- @Override
- public List<Ordering> getOrderings() {
- return query.getOrderings();
- }
-
- @Override
- public int getPageSize() {
- return query.getPageSize();
- }
-
- @Override
- public PrefetchTreeNode getPrefetchTree() {
- return query.getPrefetchTree();
- }
-
- @Override
- public Expression getQualifier() {
- return query.getQualifier();
- }
-
- @Override
- public Object getRoot() {
- return query.getRoot();
- }
-
- @Override
- public int hashCode() {
- return query.hashCode();
- }
-
- @Override
- public void initWithProperties(Map properties) {
- query.initWithProperties(properties);
- }
-
- @Override
- public boolean isDistinct() {
- return query.isDistinct();
- }
-
- @Override
- public boolean isFetchingDataRows() {
- return query.isFetchingDataRows();
- }
-
- @Override
- public void orQualifier(Expression e) {
- query.orQualifier(e);
- }
-
- @Override
- public SelectQuery<T> queryWithParameters(Map parameters, boolean pruneMissing) {
- return query.queryWithParameters(parameters, pruneMissing);
- }
-
- @Override
- public SelectQuery<T> queryWithParameters(Map parameters) {
- return query.queryWithParameters(parameters);
- }
-
- @Override
- public void removeOrdering(Ordering ordering) {
- query.removeOrdering(ordering);
- }
-
- @Override
- public void removePrefetch(String prefetchPath) {
- query.removePrefetch(prefetchPath);
- }
-
- @Override
- public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) {
- query.route(router, resolver, substitutedQuery);
- }
-
- @Override
- public void setCacheGroups(String... cachGroups) {
- query.setCacheGroups(cachGroups);
- }
-
- @Override
- public void setDistinct(boolean distinct) {
- query.setDistinct(distinct);
- }
-
- @Override
- public void setFetchingDataRows(boolean flag) {
- query.setFetchingDataRows(flag);
- }
-
- @Override
- public void setFetchLimit(int fetchLimit) {
- query.setFetchLimit(fetchLimit);
- }
-
- @Override
- public void setName(String name) {
- query.setName(name);
- }
-
- @Override
- public void setPageSize(int pageSize) {
- query.setPageSize(pageSize);
- }
-
- @Override
- public void setPrefetchTree(PrefetchTreeNode prefetchTree) {
- query.setPrefetchTree(prefetchTree);
- }
-
- @Override
- public void setQualifier(Expression qualifier) {
- query.setQualifier(qualifier);
- }
-
- @Override
- public void setRoot(Object value) {
- query.setRoot(value);
- }
-
- @Override
- public String toString() {
- return query.toString();
- }
-
- @Override
- public <T> List<T> select(ObjectContext context) {
- return query.select(context);
- }
-
- @Override
- public T selectOne(ObjectContext context) {
- return query.selectOne(context);
- }
-
- @Override
- public T selectFirst(ObjectContext context) {
- return query.selectFirst(context);
- }
-
- @Override
- public <T> void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
- query.iterate(context, callback);
- }
-
- @Override
- public ResultIterator<T> iterator(ObjectContext context) {
- return query.iterator(context);
- }
-
- @Override
- public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
- return query.batchIterator(context, size);
- }
+ private SelectQuery<T> query;
+ private String cacheKey;
+
+ IncrementalSelectQuery(SelectQuery<T> delegate, String cacheKey) {
+ this.query = delegate;
+ this.cacheKey = cacheKey;
+ }
+
+ @Override
+ public QueryMetadata getMetaData(EntityResolver resolver) {
+ final QueryMetadata metadata = query.getMetaData(resolver);
+
+ // the way paginated queries work on the server is that they are never
+ // cached
+ // (IncrementalFaultList interception happens before cache
+ // interception). So
+ // overriding caching settings in the metadata will only affect
+ // ClientServerChannel behavior
+
+ return new QueryMetadata() {
+
+ public Query getOrginatingQuery() {
+ return null;
+ }
+
+ public String getCacheKey() {
+ return cacheKey;
+ }
+
+ public List<Object> getResultSetMapping() {
+ return metadata.getResultSetMapping();
+ }
+
+ public String[] getCacheGroups() {
+ return metadata.getCacheGroups();
+ }
+
+ public QueryCacheStrategy getCacheStrategy() {
+ return metadata.getCacheStrategy();
+ }
+
+ public DataMap getDataMap() {
+ return metadata.getDataMap();
+ }
+
+ public DbEntity getDbEntity() {
+ return metadata.getDbEntity();
+ }
+
+ public int getFetchLimit() {
+ return metadata.getFetchLimit();
+ }
+
+ public int getFetchOffset() {
+ return metadata.getFetchOffset();
+ }
+
+ public ObjEntity getObjEntity() {
+ return metadata.getObjEntity();
+ }
+
+ public ClassDescriptor getClassDescriptor() {
+ return metadata.getClassDescriptor();
+ }
+
+ public int getPageSize() {
+ return metadata.getPageSize();
+ }
+
+ public PrefetchTreeNode getPrefetchTree() {
+ return metadata.getPrefetchTree();
+ }
+
+ public Procedure getProcedure() {
+ return metadata.getProcedure();
+ }
+
+ public Map<String, String> getPathSplitAliases() {
+ return metadata.getPathSplitAliases();
+ }
+
+ public boolean isFetchingDataRows() {
+ return metadata.isFetchingDataRows();
+ }
+
+ public boolean isRefreshingObjects() {
+ return metadata.isRefreshingObjects();
+ }
+
+ public int getStatementFetchSize() {
+ return metadata.getStatementFetchSize();
+ }
+ };
+ }
+
+ @Override
+ public void addOrdering(Ordering ordering) {
+ query.addOrdering(ordering);
+ }
+
+ @Override
+ public void addOrdering(String sortPathSpec, SortOrder order) {
+ query.addOrdering(sortPathSpec, order);
+ }
+
+ @Override
+ public void addOrderings(Collection<? extends Ordering> orderings) {
+ query.addOrderings(orderings);
+ }
+
+ @Override
+ public PrefetchTreeNode addPrefetch(String prefetchPath) {
+ return query.addPrefetch(prefetchPath);
+ }
+
+ @Override
+ public void andQualifier(Expression e) {
+ query.andQualifier(e);
+ }
+
+ @Override
+ public void clearOrderings() {
+ query.clearOrderings();
+ }
+
+ @Override
+ public void clearPrefetches() {
+ query.clearPrefetches();
+ }
+
+ @Override
+ public SelectQuery<T> createQuery(Map parameters) {
+ return query.createQuery(parameters);
+ }
+
+ @Override
+ public SQLAction createSQLAction(SQLActionVisitor visitor) {
+ return query.createSQLAction(visitor);
+ }
+
+ @Override
+ public void encodeAsXML(XMLEncoder encoder) {
+ query.encodeAsXML(encoder);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return query.equals(obj);
+ }
+
+ @Override
+ public String[] getCacheGroups() {
+ return query.getCacheGroups();
+ }
+
+ @Override
+ public int getFetchLimit() {
+ return query.getFetchLimit();
+ }
+
+ @Override
+ public String getName() {
+ return query.getName();
+ }
+
+ @Override
+ public List<Ordering> getOrderings() {
+ return query.getOrderings();
+ }
+
+ @Override
+ public int getPageSize() {
+ return query.getPageSize();
+ }
+
+ @Override
+ public PrefetchTreeNode getPrefetchTree() {
+ return query.getPrefetchTree();
+ }
+
+ @Override
+ public Expression getQualifier() {
+ return query.getQualifier();
+ }
+
+ @Override
+ public Object getRoot() {
+ return query.getRoot();
+ }
+
+ @Override
+ public int hashCode() {
+ return query.hashCode();
+ }
+
+ @Override
+ public void initWithProperties(Map properties) {
+ query.initWithProperties(properties);
+ }
+
+ @Override
+ public boolean isDistinct() {
+ return query.isDistinct();
+ }
+
+ @Override
+ public boolean isFetchingDataRows() {
+ return query.isFetchingDataRows();
+ }
+
+ @Override
+ public void orQualifier(Expression e) {
+ query.orQualifier(e);
+ }
+
+ @Override
+ public SelectQuery<T> queryWithParameters(Map parameters, boolean pruneMissing) {
+ return query.queryWithParameters(parameters, pruneMissing);
+ }
+
+ @Override
+ public SelectQuery<T> queryWithParameters(Map parameters) {
+ return query.queryWithParameters(parameters);
+ }
+
+ @Override
+ public void removeOrdering(Ordering ordering) {
+ query.removeOrdering(ordering);
+ }
+
+ @Override
+ public void removePrefetch(String prefetchPath) {
+ query.removePrefetch(prefetchPath);
+ }
+
+ @Override
+ public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) {
+ query.route(router, resolver, substitutedQuery);
+ }
+
+ @Override
+ public void setCacheGroups(String... cachGroups) {
+ query.setCacheGroups(cachGroups);
+ }
+
+ @Override
+ public void setDistinct(boolean distinct) {
+ query.setDistinct(distinct);
+ }
+
+ @Override
+ public void setFetchingDataRows(boolean flag) {
+ query.setFetchingDataRows(flag);
+ }
+
+ @Override
+ public void setFetchLimit(int fetchLimit) {
+ query.setFetchLimit(fetchLimit);
+ }
+
+ @Override
+ public void setName(String name) {
+ query.setName(name);
+ }
+
+ @Override
+ public void setPageSize(int pageSize) {
+ query.setPageSize(pageSize);
+ }
+
+ @Override
+ public void setPrefetchTree(PrefetchTreeNode prefetchTree) {
+ query.setPrefetchTree(prefetchTree);
+ }
+
+ @Override
+ public void setQualifier(Expression qualifier) {
+ query.setQualifier(qualifier);
+ }
+
+ @Override
+ public void setRoot(Object value) {
+ query.setRoot(value);
+ }
+
+ @Override
+ public String toString() {
+ return query.toString();
+ }
+
+ @Override
+ public List<T> select(ObjectContext context) {
+ return query.select(context);
+ }
+
+ @Override
+ public T selectOne(ObjectContext context) {
+ return query.selectOne(context);
+ }
+
+ @Override
+ public T selectFirst(ObjectContext context) {
+ return query.selectFirst(context);
+ }
+
+ @Override
+ public void iterate(ObjectContext context, ResultIteratorCallback<T> callback) {
+ query.iterate(context, callback);
+ }
+
+ @Override
+ public ResultIterator<T> iterator(ObjectContext context) {
+ return query.iterator(context);
+ }
+
+ @Override
+ public ResultBatchIterator<T> batchIterator(ObjectContext context, int size) {
+ return query.batchIterator(context, size);
+ }
}