public interface AsyncResultSet extends ResultSet
Modifier and Type | Interface and Description |
---|---|
static class |
AsyncResultSet.CallbackResponse |
static class |
AsyncResultSet.CursorState
Response code from
tryNext() . |
static interface |
AsyncResultSet.ReadyCallback
Interface for receiving asynchronous callbacks when new data is ready.
|
Modifier and Type | Method and Description |
---|---|
void |
cancel()
Attempt to cancel this operation and free all resources.
|
void |
resume()
Resume callbacks from the cursor.
|
com.google.api.core.ApiFuture<Void> |
setCallback(Executor exec,
AsyncResultSet.ReadyCallback cb)
Register a callback with the ResultSet to be made aware when more data is available, changing
the usage pattern from sync to async.
|
<T> List<T> |
toList(com.google.common.base.Function<StructReader,T> transformer)
Transforms the row cursor into an immutable list using the given transformer function.
|
<T> com.google.api.core.ApiFuture<List<T>> |
toListAsync(com.google.common.base.Function<StructReader,T> transformer,
Executor executor)
Transforms the row cursor into an immutable list using the given transformer function.
|
AsyncResultSet.CursorState |
tryNext()
Non-blocking call that attempts to step the cursor to the next position in the stream.
|
close, getCurrentRowAsStruct, getStats, next
getBigDecimal, getBigDecimal, getBigDecimalList, getBigDecimalList, getBoolean, getBoolean, getBooleanArray, getBooleanArray, getBooleanList, getBooleanList, getBytes, getBytes, getBytesList, getBytesList, getColumnCount, getColumnIndex, getColumnType, getColumnType, getDate, getDate, getDateList, getDateList, getDouble, getDouble, getDoubleArray, getDoubleArray, getDoubleList, getDoubleList, getLong, getLong, getLongArray, getLongArray, getLongList, getLongList, getString, getString, getStringList, getStringList, getStructList, getStructList, getTimestamp, getTimestamp, getTimestampList, getTimestampList, getType, getValue, getValue, isNull, isNull
AsyncResultSet.CursorState tryNext() throws SpannerException
CursorState.OK
.
A caller will typically call tryNext in a loop inside the ReadyCallback, consuming all
results available. For more information see setCallback(Executor, ReadyCallback)
.
Currently this method may only be called if a ReadyCallback has been registered. This is for safety purposes only, and may be relaxed in future.
SpannerException
- When an unrecoverable problem downstream occurs. Once this occurs you
will get no further callbacks. You should return CallbackResponse.DONE back from callback.com.google.api.core.ApiFuture<Void> setCallback(Executor exec, AsyncResultSet.ReadyCallback cb)
AsyncResultSet.CallbackResponse.CONTINUE
.
AsyncResultSet.CallbackResponse.CONTINUE
with data still in the ResultSet,
the callback is invoked again immediately!
AsyncResultSet.CallbackResponse.PAUSE
on the cursor no more
callbacks will be run until a corresponding resume()
.
AsyncResultSet.CallbackResponse.DONE
.
ResultSet#tryNext()
returns AsyncResultSet.CursorState.DONE
.
ResultSet#tryNext()
throws an exception.
ResultSet#cancel()
call, but the
subsequent call to tryNext()
will yield a SpannerException.
AsyncResultSet.CallbackResponse.CONTINUE
any time it sees AsyncResultSet.CursorState.NOT_READY
.
{@code
exec
- executor on which to run all callbacks. Typically use a threadpool. If the executor
is one that runs the work on the submitting thread, you must be very careful not to throw
RuntimeException up the stack, lest you do damage to calling components. For example, it
may cause an event dispatcher thread to crash.cb
- ready callbackApiFuture
that returns null
when the consumption of the AsyncResultSet
has finished successfully. No more calls to the AsyncResultSet.ReadyCallback
will
follow and all resources used by the AsyncResultSet
have been cleaned up. The
ApiFuture
throws an ExecutionException
if the consumption of the AsyncResultSet
finished with an error.void cancel()
void resume()
<T> com.google.api.core.ApiFuture<List<T>> toListAsync(com.google.common.base.Function<StructReader,T> transformer, Executor executor)
transformer
will be called once per row, thus the returned list will contain one entry per
row. The returned future will throw a SpannerException
if the row cursor encountered
any error or if the transformer threw an exception on any row.
The transformer will be run on the supplied executor. The implementation may batch multiple
transformer invocations together into a single Runnable
when possible to increase
efficiency. At any point in time, there will be at most one invocation of the transformer in
progress.
WARNING: This will result in materializing the entire list so this should be used judiciously after considering the memory requirements of the returned list.
WARNING: The RowBase
object passed to transformer function is not immutable and is
not guaranteed to remain valid after the transformer function returns. The same RowBase
object might be passed multiple times to the transformer with different underlying data each
time. So *NEVER* keep a reference to the RowBase
outside of the transformer.
Specifically do not use Functions.identity()
function.
transformer
- function which will be used to transform the row. It should not return null.executor
- executor on which the transformer will be run. This should ideally not be an
inline executor such as MoreExecutors.directExecutor()
; using such an executor may
degrade the performance of the Spanner library.<T> List<T> toList(com.google.common.base.Function<StructReader,T> transformer) throws SpannerException
transformer
will be called once per row, thus the returned list will contain one entry per
row. This method will block until all the rows have been yielded by the cursor.
WARNING: This will result in consuming the entire list so this should be used judiciously after considering the memory requirements of the returned list.
WARNING: The RowBase
object passed to transformer function is not immutable and is
not guaranteed to remain valid after the transformer function returns. The same RowBase
object might be passed multiple times to the transformer with different underlying data each
time. So *NEVER* keep a reference to the RowBase
outside of the transformer.
Specifically do not use Functions.identity()
function.
transformer
- function which will be used to transform the row. It should not return null.SpannerException
Copyright © 2021 Google LLC. All rights reserved.