public class ForwardingAsyncResultSet extends ForwardingResultSet implements AsyncResultSet
AsyncResultSet
that forwards all calls to a delegate.AsyncResultSet.CallbackResponse, AsyncResultSet.CursorState, AsyncResultSet.ReadyCallback
Constructor and Description |
---|
ForwardingAsyncResultSet(AsyncResultSet delegate) |
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
checkValidState, 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, getJson, getJson, getJsonList, getJsonList, getLong, getLong, getLongArray, getLongArray, getLongList, getLongList, getString, getString, getStringList, getStringList, getStructList, getStructList, getTimestamp, getTimestamp, getTimestampList, getTimestampList, getType, getValue, getValue, isNull, isNull
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
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, getJson, getJson, getJsonList, getJsonList, getLong, getLong, getLongArray, getLongArray, getLongList, getLongList, getString, getString, getStringList, getStringList, getStructList, getStructList, getTimestamp, getTimestamp, getTimestampList, getTimestampList, getType, getValue, getValue, isNull, isNull
public ForwardingAsyncResultSet(AsyncResultSet delegate)
public AsyncResultSet.CursorState tryNext() throws SpannerException
AsyncResultSet
CursorState.OK
.
A caller will typically call tryNext in a loop inside the ReadyCallback, consuming all
results available. For more information see AsyncResultSet.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.
tryNext
in interface AsyncResultSet
SpannerException
- When an unrecoverable problem downstream occurs. Once this occurs you
will get no further callbacks. You should return CallbackResponse.DONE back from callback.public com.google.api.core.ApiFuture<Void> setCallback(Executor exec, AsyncResultSet.ReadyCallback cb)
AsyncResultSet
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 AsyncResultSet.resume()
.
AsyncResultSet.CallbackResponse.DONE
.
ResultSet#tryNext()
returns AsyncResultSet.CursorState.DONE
.
ResultSet#tryNext()
throws an exception.
ResultSet#cancel()
call, but the
subsequent call to AsyncResultSet.tryNext()
will yield a SpannerException.
AsyncResultSet.CallbackResponse.CONTINUE
any time it sees AsyncResultSet.CursorState.NOT_READY
.
{@code
setCallback
in interface AsyncResultSet
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.public void cancel()
AsyncResultSet
cancel
in interface AsyncResultSet
public void resume()
AsyncResultSet
resume
in interface AsyncResultSet
public <T> com.google.api.core.ApiFuture<List<T>> toListAsync(com.google.common.base.Function<StructReader,T> transformer, Executor executor)
AsyncResultSet
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.
toListAsync
in interface AsyncResultSet
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.public <T> List<T> toList(com.google.common.base.Function<StructReader,T> transformer) throws SpannerException
AsyncResultSet
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.
toList
in interface AsyncResultSet
transformer
- function which will be used to transform the row. It should not return null.SpannerException
Copyright © 2022 Google LLC. All rights reserved.