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);
+	}
 }