[#4337] Add Stream<R> ResultQuery.stream()
This commit is contained in:
parent
037c21270e
commit
fe405d772c
@ -51,6 +51,9 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.jooq.conf.Settings;
|
||||
import org.jooq.exception.DataAccessException;
|
||||
@ -142,6 +145,31 @@ public interface ResultQuery<R extends Record> extends Query, Iterable<R> {
|
||||
@Override
|
||||
Iterator<R> iterator() throws DataAccessException;
|
||||
|
||||
/* [java-8] */
|
||||
/**
|
||||
* Stream this query.
|
||||
* <p>
|
||||
* This is essentially the same as {@link #fetchLazy()} but instead of
|
||||
* returning a {@link Cursor}, a Java 8 {@link Stream} is returned. Clients
|
||||
* should ensure the {@link Stream} is properly closed, e.g. in a
|
||||
* try-with-resources statement:
|
||||
* <p>
|
||||
* <code><pre>
|
||||
* try (Stream<R> stream = query.stream()) {
|
||||
* // Do things with stream
|
||||
* }
|
||||
* </pre></code>
|
||||
* <p>
|
||||
* If users prefer more fluent style streaming of queries, {@link ResultSet}
|
||||
* can be registered and closed via {@link ExecuteListener}, or via "smart"
|
||||
* third-party {@link DataSource}s.
|
||||
*
|
||||
* @return The result.
|
||||
* @throws DataAccessException if something went wrong executing the query
|
||||
*/
|
||||
Stream<R> stream() throws DataAccessException;
|
||||
/* [/java-8] */
|
||||
|
||||
/**
|
||||
* Execute the query and "lazily" return the generated result.
|
||||
* <p>
|
||||
|
||||
@ -60,9 +60,13 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.Spliterator;
|
||||
import java.util.Spliterators;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import org.jooq.Configuration;
|
||||
import org.jooq.Converter;
|
||||
@ -77,6 +81,7 @@ import org.jooq.RecordMapper;
|
||||
import org.jooq.Result;
|
||||
import org.jooq.ResultQuery;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.exception.DataAccessException;
|
||||
import org.jooq.tools.Convert;
|
||||
import org.jooq.tools.JooqLogger;
|
||||
|
||||
@ -309,6 +314,22 @@ abstract class AbstractResultQuery<R extends Record> extends AbstractQuery imple
|
||||
return fetch().iterator();
|
||||
}
|
||||
|
||||
/* [java-8] */
|
||||
@Override
|
||||
public final Stream<R> stream() throws DataAccessException {
|
||||
Cursor<R> c = fetchLazy();
|
||||
|
||||
return StreamSupport.stream(
|
||||
Spliterators.spliterator(
|
||||
c.iterator(),
|
||||
0,
|
||||
Spliterator.ORDERED | Spliterator.NONNULL
|
||||
),
|
||||
false
|
||||
).onClose(() -> c.close());
|
||||
}
|
||||
/* [/java-8] */
|
||||
|
||||
@Override
|
||||
public final Cursor<R> fetchLazy() {
|
||||
return fetchLazy(fetchSize);
|
||||
|
||||
@ -54,6 +54,7 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.annotation.Generated;
|
||||
|
||||
@ -2359,6 +2360,13 @@ class SelectImpl<R extends Record, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
|
||||
return getDelegate().iterator();
|
||||
}
|
||||
|
||||
/* [java-8] */
|
||||
@Override
|
||||
public final Stream<R> stream() {
|
||||
return getDelegate().stream();
|
||||
}
|
||||
/* [/java-8] */
|
||||
|
||||
@Override
|
||||
public final Cursor<R> fetchLazy() {
|
||||
return getDelegate().fetchLazy();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user