package org.infinispan.query;
/**
* @author <a href="mailto:mluksa@redhat.com">Marko Luksa</a>
*/
public class FetchOptions {
private FetchMode fetchMode;
private int fetchSize;
public FetchOptions() {
fetchMode(FetchMode.LAZY);
fetchSize(1);
}
/**
* Set the fetch mode to be used to fetch matching results
* @param fetchMode
* @return {@code this} to allow method chaining
*/
public FetchOptions fetchMode(FetchMode fetchMode) {
if (fetchMode == null) {
throw new IllegalArgumentException("fetchMode should not be null");
}
this.fetchMode = fetchMode;
return this;
}
/**
* Set the fetch size for batch loading of matches
* @param fetchSize
* @return {@code this} to allow method chaining
*/
public FetchOptions fetchSize(int fetchSize) {
if (fetchSize < 1) {
throw new IllegalArgumentException("fetchSize should be greater than 0");
}
this.fetchSize = fetchSize;
return this;
}
/**
* @return the selected fetch mode
*/
public FetchMode getFetchMode() {
return fetchMode;
}
/**
* @return the used fetch size
*/
public int getFetchSize() {
return fetchSize;
}
/**
* Specifies the fetching strategy
* for query results.
*/
public static enum FetchMode {
/**
* With eager mode all results are loaded as
* soon as the query is performed; this results
* in a larger initial transfer of entries but no
* remote operations during iteration of the resultset.
*/
EAGER,
/**
* With lazy loading the entries are not loaded
* until each one is specifically requested.
* If iterating on very larger result sets this
* is recommended to avoid loading too many entries
* in the VM performing the iteration.
*/
LAZY
}
}