#891 - Refactor: Replace Ebean's QueryEachConsumer with java.util.function.Consumer

This commit is contained in:
Rob Bygrave
2016-11-24 00:02:23 +13:00
parent a391a25b7f
commit 6f322dcfb2
19 changed files with 48 additions and 108 deletions
@@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* Document storage operations.
@@ -129,7 +130,7 @@ public interface DocumentStore {
*
* }</pre>
*/
<T> void findEach(DocQueryRequest<T> query, QueryEachConsumer<T> consumer);
<T> void findEach(DocQueryRequest<T> query, Consumer<T> consumer);
/**
* Execute the query against the document store with the expectation of a large set of results
@@ -15,6 +15,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Provides the API for fetching and saving beans to a particular DataSource.
@@ -755,7 +756,7 @@ public interface EbeanServer {
/**
* Return a QueryIterator for the query.
* <p>
* Generally using {@link #findEach(Query, QueryEachConsumer, Transaction)} or
* Generally using {@link #findEach(Query, Consumer, Transaction)} or
* {@link #findEachWhile(Query, QueryEachWhileConsumer, Transaction)} is preferred
* to findIterate(). The reason is that those methods automatically take care of
* closing the queryIterator (and the underlying jdbc statement and resultSet).
@@ -766,7 +767,7 @@ public interface EbeanServer {
* </p>
*
* @see Query#findIterate()
* @see Query#findEach(QueryEachConsumer)
* @see Query#findEach(Consumer)
* @see Query#findEachWhile(QueryEachWhileConsumer)
*/
<T> QueryIterator<T> findIterate(Query<T> query, Transaction transaction);
@@ -796,10 +797,10 @@ public interface EbeanServer {
*
* }</pre>
*
* @see Query#findEach(QueryEachConsumer)
* @see Query#findEach(Consumer)
* @see Query#findEachWhile(QueryEachWhileConsumer)
*/
<T> void findEach(Query<T> query, QueryEachConsumer<T> consumer, Transaction transaction);
<T> void findEach(Query<T> query, Consumer<T> consumer, Transaction transaction);
/**
* Execute the query visiting the each bean one at a time.
@@ -833,7 +834,7 @@ public interface EbeanServer {
*
* }</pre>
*
* @see Query#findEach(QueryEachConsumer)
* @see Query#findEach(Consumer)
* @see Query#findEachWhile(QueryEachWhileConsumer)
*/
<T> void findEachWhile(Query<T> query, QueryEachWhileConsumer<T> consumer, Transaction transaction);
@@ -1093,7 +1094,7 @@ public interface EbeanServer {
* This streaming type query is useful for large query execution as only 1 row needs to be held in memory.
* </p>
*/
void findEach(SqlQuery query, QueryEachConsumer<SqlRow> consumer, Transaction transaction);
void findEach(SqlQuery query, Consumer<SqlRow> consumer, Transaction transaction);
/**
* Execute the SqlQuery iterating a row at a time with the ability to stop consuming part way through.
@@ -13,6 +13,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* List of Expressions that make up a where or having clause.
@@ -151,9 +152,9 @@ public interface ExpressionList<T> {
/**
* Execute the query process the beans one at a time.
*
* @see Query#findEach(QueryEachConsumer)
* @see Query#findEach(Consumer)
*/
void findEach(QueryEachConsumer<T> consumer);
void findEach(Consumer<T> consumer);
/**
* Execute the query processing the beans one at a time with the ability to
+3 -2
View File
@@ -9,6 +9,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
/**
* A MappedSuperclass base class that provides convenience methods for inserting, updating and
@@ -596,9 +597,9 @@ public abstract class Model {
* you do not want to hold all the results in memory at once but instead
* process them one at a time (requiring far less memory).
* </p>
* Equivalent to {@link Query#findEach(QueryEachConsumer)}
* Equivalent to {@link Query#findEach(Consumer)}
*/
public void findEach(QueryEachConsumer<T> consumer) {
public void findEach(Consumer<T> consumer) {
query().findEach(consumer);
}
+2 -1
View File
@@ -7,6 +7,7 @@ import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Object relational query for finding a List, Set, Map or single entity bean.
@@ -627,7 +628,7 @@ public interface Query<T> {
*
* @param consumer the consumer used to process the queried beans.
*/
void findEach(QueryEachConsumer<T> consumer);
void findEach(Consumer<T> consumer);
/**
* Execute the query using callbacks to a visitor to process the resulting
@@ -1,39 +0,0 @@
package com.avaje.ebean;
/**
* Used to process a query result one bean at a time via a callback to this
* visitor.
* <p>
* If you wish to stop further processing return false from the accept method.
* </p>
* <p>
* Unlike findList() and findSet() using a QueryResultVisitor does not require
* all the beans in the query result to be held in memory at once. This makes
* QueryResultVisitor useful for processing large queries.
* </p>
* <p>
* <pre>{@code
*
* Query<Customer> query = server.find(Customer.class)
* .where().eq("status", Status.NEW)
* .order().asc("id");
*
* query.findEach((Customer customer) -> {
*
* // do something with customer
* System.out.println("-- visit " + customer);
* });
*
* }</pre>
*
* @param <T> the type of entity bean being queried.
*/
public interface QueryEachConsumer<T> {
/**
* Process the bean.
*
* @param bean the entity bean to process
*/
void accept(T bean);
}
+2 -1
View File
@@ -2,6 +2,7 @@ package com.avaje.ebean;
import java.io.Serializable;
import java.util.List;
import java.util.function.Consumer;
/**
* Query object for performing native SQL queries that return SqlRow's.
@@ -48,7 +49,7 @@ public interface SqlQuery extends Serializable {
* This streaming type query is useful for large query execution as only 1 row needs to be held in memory.
* </p>
*/
void findEach(QueryEachConsumer<SqlRow> consumer);
void findEach(Consumer<SqlRow> consumer);
/**
* Execute the SqlQuery iterating a row at a time with the ability to stop consuming part way through.
@@ -13,7 +13,6 @@ import com.avaje.ebean.FutureRowCount;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.PersistenceContextScope;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.RawSql;
@@ -108,6 +107,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
/**
* The default server side implementation of EbeanServer.
@@ -1351,7 +1351,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
public <T> void findEach(Query<T> query, QueryEachConsumer<T> consumer, Transaction t) {
public <T> void findEach(Query<T> query, Consumer<T> consumer, Transaction t) {
SpiOrmQueryRequest<T> request = createQueryRequest(Type.ITERATE, query, t);
@@ -1421,7 +1421,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
@Override
public void findEach(SqlQuery query, QueryEachConsumer<SqlRow> consumer, Transaction transaction) {
public void findEach(SqlQuery query, Consumer<SqlRow> consumer, Transaction transaction) {
RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction);
try {
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.PersistenceContextScope;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.RawSql;
@@ -37,6 +36,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Wraps the objects involved in executing a Query.
@@ -310,7 +310,7 @@ public final class OrmQueryRequest<T> extends BeanRequest implements BeanQueryRe
return queryEngine.findIds(this);
}
public void findEach(QueryEachConsumer<T> consumer) {
public void findEach(Consumer<T> consumer) {
QueryIterator<T> it = queryEngine.findIterate(this);
try {
while (it.hasNext()) {
@@ -1,11 +1,11 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.SqlRow;
import java.util.List;
import java.util.function.Consumer;
public interface RelationalQueryEngine {
@@ -17,11 +17,11 @@ public interface RelationalQueryEngine {
/**
* Find each query using relational query.
*/
void findEach(RelationalQueryRequest request, QueryEachConsumer<SqlRow> consumer);
void findEach(RelationalQueryRequest request, Consumer<SqlRow> consumer);
/**
* Find each while query using relational query.
*/
void findEach(RelationalQueryRequest request, QueryEachWhileConsumer<SqlRow> consumer);
}
}
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.SqlQuery;
import com.avaje.ebean.SqlRow;
@@ -25,6 +24,7 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* Wraps the objects involved in executing a SqlQuery.
@@ -90,7 +90,7 @@ public final class RelationalQueryRequest {
}
}
public void findEach(QueryEachConsumer<SqlRow> consumer) {
public void findEach(Consumer<SqlRow> consumer) {
queryEngine.findEach(this, consumer);
}
@@ -1,6 +1,5 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.Version;
@@ -12,6 +11,7 @@ import com.avaje.ebeanservice.docstore.api.DocQueryRequest;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Defines the ORM query request api.
@@ -76,7 +76,7 @@ public interface SpiOrmQueryRequest<T> extends DocQueryRequest<T> {
/**
* Execute the find returning a QueryIterator and visitor pattern.
*/
void findEach(QueryEachConsumer<T> consumer);
void findEach(Consumer<T> consumer);
/**
* Execute the find returning a QueryIterator and visitor pattern.
@@ -132,4 +132,4 @@ public interface SpiOrmQueryRequest<T> extends DocQueryRequest<T> {
* Return true if this query is expected to use the doc store.
*/
boolean isUseDocStore();
}
}
@@ -11,7 +11,6 @@ import com.avaje.ebean.Junction;
import com.avaje.ebean.OrderBy;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.Version;
@@ -37,6 +36,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Default implementation of ExpressionList.
@@ -367,7 +367,7 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
}
@Override
public void findEach(QueryEachConsumer<T> consumer) {
public void findEach(Consumer<T> consumer) {
query.findEach(consumer);
}
@@ -10,7 +10,6 @@ import com.avaje.ebean.Junction;
import com.avaje.ebean.OrderBy;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.Version;
@@ -34,6 +33,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Junction implementation.
@@ -373,7 +373,7 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
}
@Override
public void findEach(QueryEachConsumer<T> consumer) {
public void findEach(Consumer<T> consumer) {
exprList.findEach(consumer);
}
@@ -1,6 +1,5 @@
package com.avaje.ebeaninternal.server.query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.SqlRow;
import com.avaje.ebeaninternal.server.core.Message;
@@ -12,6 +11,7 @@ import javax.persistence.PersistenceException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* Perform native sql fetches.
@@ -49,7 +49,7 @@ public class DefaultRelationalQueryEngine implements RelationalQueryEngine {
}
@Override
public void findEach(RelationalQueryRequest request, QueryEachConsumer<SqlRow> consumer) {
public void findEach(RelationalQueryRequest request, Consumer<SqlRow> consumer) {
long startTime = System.currentTimeMillis();
@@ -14,7 +14,6 @@ import com.avaje.ebean.OrderBy.Property;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.PersistenceContextScope;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.QueryIterator;
import com.avaje.ebean.RawSql;
@@ -52,6 +51,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
/**
* Default implementation of an Object Relational query.
@@ -1125,7 +1125,7 @@ public class DefaultOrmQuery<T> implements SpiQuery<T> {
}
@Override
public void findEach(QueryEachConsumer<T> consumer) {
public void findEach(Consumer<T> consumer) {
server.findEach(this, consumer, null);
}
@@ -1,13 +1,13 @@
package com.avaje.ebeaninternal.server.querydefn;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebean.SqlRow;
import com.avaje.ebeaninternal.api.BindParams;
import com.avaje.ebeaninternal.api.SpiSqlQuery;
import java.util.List;
import java.util.function.Consumer;
/**
* Default implementation of SQuery - SQL Query.
@@ -47,7 +47,7 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
}
@Override
public void findEach(QueryEachConsumer<SqlRow> consumer) {
public void findEach(Consumer<SqlRow> consumer) {
server.findEach(this, consumer, null);
}
@@ -4,13 +4,13 @@ import com.avaje.ebean.DocStoreQueueEntry;
import com.avaje.ebean.DocumentStore;
import com.avaje.ebean.PagedList;
import com.avaje.ebean.Query;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.QueryEachWhileConsumer;
import com.avaje.ebeanservice.docstore.api.DocQueryRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* DocumentStore that barfs it is used.
@@ -82,7 +82,7 @@ public class NoneDocStore implements DocumentStore {
}
@Override
public <T> void findEach(DocQueryRequest<T> query, QueryEachConsumer<T> consumer) {
public <T> void findEach(DocQueryRequest<T> query, Consumer<T> consumer) {
throw implementationNotInClassPath();
}