users@jpa-spec.java.net

[jpa-spec users] Re: JPA_SPEC-99: Add ability to stream the result of a query execution

From: Michael Nascimento <misterm_at_gmail.com>
Date: Thu, 4 May 2017 18:40:13 -0300

This change seems very valuable and welcome, for sure.

Regards,
Michael

On Thu, May 4, 2017 at 5:01 PM, Lukas Jungmann <lukas.jungmann_at_oracle.com>
wrote:

> Hi,
>
> another change I'd like to propose is an addition of
> getResultStream:Stream method to javax.persistence.Query/TypedQuery
> interfaces with following javadoc and provided with default implementation:
>
> javax.persistence.Query:
>
> * /***
> * * Execute a SELECT query and return the query results*
> * * as an untyped <code>java.util.Stream</code>.*
> * * By default this method delegates to
> <code>getResultList().stream()</code>,*
> * * however persistence provider may choose to override this method*
> * * to provide additional capabilities.*
> * **
> * * @return a stream of the results*
> * * @throws IllegalStateException if called for a Java*
> * * Persistence query language UPDATE or DELETE statement*
> * * @throws QueryTimeoutException if the query execution exceeds*
> * * the query timeout value set and only the statement is*
> * * rolled back*
> * * @throws TransactionRequiredException if a lock mode other than*
> * * <code>NONE</code> has been set and there is no transaction*
> * * or the persistence context has not been joined to the
> transaction*
> * * @throws PessimisticLockException if pessimistic locking*
> * * fails and the transaction is rolled back*
> * * @throws LockTimeoutException if pessimistic locking*
> * * fails and only the statement is rolled back*
> * * @throws PersistenceException if the query execution exceeds *
> * * the query timeout value set and the transaction *
> * * is rolled back *
> * * @see Stream*
> * * @see #getResultList()*
> * * @since 2.2*
> * */*
> * default Stream getResultStream() {*
> * return getResultList().stream();*
> * }*
>
> similarly to javax.persistence.TypedQuery:
>
> * /***
> * * Execute a SELECT query and return the query results*
> * * as a typed <code>java.util.Stream</code>.*
> * * By default this method delegates to
> <code>getResultList().stream()</code>,*
> * * however persistence provider may choose to override this method*
> * * to provide additional capabilities.*
> * **
> * * @return a stream of the results*
> * * @throws IllegalStateException if called for a Java*
> * * Persistence query language UPDATE or DELETE statement*
> * * @throws QueryTimeoutException if the query execution exceeds*
> * * the query timeout value set and only the statement is*
> * * rolled back*
> * * @throws TransactionRequiredException if a lock mode other than*
> * * <code>NONE</code> has been set and there is no transaction*
> * * or the persistence context has not been joined to the
> transaction*
> * * @throws PessimisticLockException if pessimistic locking*
> * * fails and the transaction is rolled back*
> * * @throws LockTimeoutException if pessimistic locking*
> * * fails and only the statement is rolled back*
> * * @throws PersistenceException if the query execution exceeds *
> * * the query timeout value set and the transaction *
> * * is rolled back *
> * * @see Stream*
> * * @see #getResultList()*
> * * @since 2.2*
> * */*
> * default Stream<X> getResultStream() {*
> * return getResultList().stream();*
> * }*
>
> Do you think this is OK or does it give providers to big freedom?
>
> Thank you,
> --lukas
>