Class ForwardingAsyncResultSet

    • Constructor Detail

      • ForwardingAsyncResultSet

        public ForwardingAsyncResultSet​(AsyncResultSet delegate)
    • Method Detail

      • tryNext

        public AsyncResultSet.CursorState tryNext()
                                           throws SpannerException
        Description copied from interface: AsyncResultSet
        Non-blocking call that attempts to step the cursor to the next position in the stream. The cursor may be inspected only if the cursor returns 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.

        Specified by:
        tryNext in interface AsyncResultSet
        Returns:
        current cursor readiness state
        Throws:
        SpannerException - When an unrecoverable problem downstream occurs. Once this occurs you will get no further callbacks. You should return CallbackResponse.DONE back from callback.
      • setCallback

        public com.google.api.core.ApiFuture<Void> setCallback​(Executor exec,
                                                               AsyncResultSet.ReadyCallback cb)
        Description copied from interface: AsyncResultSet
        Register a callback with the ResultSet to be made aware when more data is available, changing the usage pattern from sync to async. Details:

        Flow Control

        If no flow control is needed (say because result sizes are known in advance to be finite in size) then async processing is simple. The following is a code example that transfers work from the cursor to an upstream sink:
        {@code
        Specified by:
        setCallback in interface AsyncResultSet
        Parameters:
        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 callback
        Returns:
        An ApiFuture 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.
      • cancel

        public void cancel()
        Description copied from interface: AsyncResultSet
        Attempt to cancel this operation and free all resources. Non-blocking. This is a no-op for child row cursors and does not cancel the parent cursor.
        Specified by:
        cancel in interface AsyncResultSet
      • resume

        public void resume()
        Description copied from interface: AsyncResultSet
        Resume callbacks from the cursor. If there is more data available, a callback will be dispatched immediately. This can be called from any thread.
        Specified by:
        resume in interface AsyncResultSet
      • toListAsync

        public <T> com.google.api.core.ApiFuture<List<T>> toListAsync​(com.google.common.base.Function<StructReader,​T> transformer,
                                                                      Executor executor)
        Description copied from interface: AsyncResultSet
        Transforms the row cursor into an immutable list using the given transformer function. 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.

        Specified by:
        toListAsync in interface AsyncResultSet
        Parameters:
        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.
      • toList

        public <T> List<T> toList​(com.google.common.base.Function<StructReader,​T> transformer)
                           throws SpannerException
        Description copied from interface: AsyncResultSet
        Transforms the row cursor into an immutable list using the given transformer function. 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.

        Specified by:
        toList in interface AsyncResultSet
        Parameters:
        transformer - function which will be used to transform the row. It should not return null.
        Throws:
        SpannerException