[#5828] Add Queries.fetchMany()

This commit is contained in:
lukaseder 2017-04-24 15:53:46 +02:00
parent 93769ffc49
commit bcf6c14f1d
3 changed files with 52 additions and 15 deletions

View File

@ -43,6 +43,10 @@ import java.util.stream.Stream;
*/
public interface Queries extends QueryPart, Iterable<Query> {
// ------------------------------------------------------------------------
// Access API
// ------------------------------------------------------------------------
/**
* The wrapped collection of queries.
*/
@ -62,4 +66,17 @@ public interface Queries extends QueryPart, Iterable<Query> {
*/
Stream<Query> queryStream();
// ------------------------------------------------------------------------
// Execution API
// ------------------------------------------------------------------------
/**
* Execute all queries one-by-one and return all results.
* <p>
* This is a convenience method for calling {@link ResultQuery#fetchMany()}
* on each individual {@link ResultQuery}, or {@link Query#execute()} on all
* others.
*/
Results fetchMany();
}

View File

@ -46,6 +46,9 @@ import org.jooq.Configuration;
import org.jooq.Context;
import org.jooq.Queries;
import org.jooq.Query;
import org.jooq.ResultQuery;
import org.jooq.Results;
import org.jooq.impl.ResultsImpl.ResultOrRowsImpl;
/**
* @author Lukas Eder
@ -66,7 +69,7 @@ final class QueriesImpl extends AbstractQueryPart implements Queries, Attachable
}
// ------------------------------------------------------------------------
// Queries API
// Access API
// ------------------------------------------------------------------------
@Override
@ -93,6 +96,23 @@ final class QueriesImpl extends AbstractQueryPart implements Queries, Attachable
}
// ------------------------------------------------------------------------
// Execution API
// ------------------------------------------------------------------------
@Override
public final Results fetchMany() {
ResultsImpl results = new ResultsImpl(configuration());
for (Query query : this)
if (query instanceof ResultQuery)
results.resultsOrRows.addAll(((ResultQuery<?>) query).fetchMany().resultsOrRows());
else
results.resultsOrRows.add(new ResultOrRowsImpl(query.execute()));
return results;
}
// ------------------------------------------------------------------------
// Attachable API
// ------------------------------------------------------------------------

View File

@ -53,14 +53,14 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
/**
* Generated UID
*/
private static final long serialVersionUID = 1744826140354980500L;
private static final long serialVersionUID = 1744826140354980500L;
private Configuration configuration;
private final List<ResultOrRows> results;
private Configuration configuration;
final List<ResultOrRows> resultsOrRows;
ResultsImpl(Configuration configuration) {
this.configuration = configuration;
this.results = new ArrayList<ResultOrRows>();
this.resultsOrRows = new ArrayList<ResultOrRows>();
}
// ------------------------------------------------------------------------
@ -69,7 +69,7 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
@Override
public final List<ResultOrRows> resultsOrRows() {
return results;
return resultsOrRows;
}
// -------------------------------------------------------------------------
@ -104,7 +104,7 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
StringBuilder sb = new StringBuilder();
String separator = "";
for (ResultOrRows result : results) {
for (ResultOrRows result : resultsOrRows) {
if (result.result() == null)
sb.append(separator).append("Update count: ").append(result.rows());
else
@ -118,7 +118,7 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
@Override
public int hashCode() {
return results.hashCode();
return resultsOrRows.hashCode();
}
@Override
@ -129,7 +129,7 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
if (obj instanceof ResultsImpl) {
ResultsImpl other = (ResultsImpl) obj;
return results.equals(other.results);
return resultsOrRows.equals(other.resultsOrRows);
}
return false;
@ -151,28 +151,28 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
@Override
public Result<Record> set(int index, Result<Record> element) {
return results.set(translatedIndex(index), new ResultOrRowsImpl(element)).result();
return resultsOrRows.set(translatedIndex(index), new ResultOrRowsImpl(element)).result();
}
@Override
public void add(int index, Result<Record> element) {
results.add(translatedIndex(index), new ResultOrRowsImpl(element));
resultsOrRows.add(translatedIndex(index), new ResultOrRowsImpl(element));
}
@Override
public Result<Record> remove(int index) {
return results.remove(translatedIndex(index)).result();
return resultsOrRows.remove(translatedIndex(index)).result();
}
@Override
public void clear() {
results.clear();
resultsOrRows.clear();
}
private final List<Result<Record>> list() {
List<Result<Record>> list = new ArrayList<Result<Record>>();
for (ResultOrRows result : results)
for (ResultOrRows result : resultsOrRows)
if (result.result() != null)
list.add(result.result());
@ -183,7 +183,7 @@ final class ResultsImpl extends AbstractList<Result<Record>> implements Results,
int translated = 0;
for (int i = 0; i < index; i++)
while (results.get(translated++).result() == null);
while (resultsOrRows.get(translated++).result() == null);
return translated;
}