public static TransactionGetRange ( |
||
transaction | ||
begin | FdbKeySelector | |
end | FdbKeySelector | |
limit | int | |
targetBytes | int | |
mode | FdbStreamingMode | |
iteration | int | |
snapshot | bool | |
reverse | bool | |
return |
/// <summary>Asynchronously fetch a new page of results</summary> /// <returns>True if Chunk contains a new page of results. False if all results have been read.</returns> public Task <FdbRangeChunk> GetRangeAsync(KeySelector begin, KeySelector end, FdbRangeOptions options, int iteration, bool snapshot, CancellationToken ct) { Contract.Requires(options != null); bool reversed = options.Reverse ?? false; var future = FdbNative.TransactionGetRange(m_handle, begin, end, options.Limit ?? 0, options.TargetBytes ?? 0, options.Mode ?? FdbStreamingMode.Iterator, iteration, snapshot, reversed); return(FdbFuture.CreateTaskFromHandle( future, (h) => { var mode = options.Read ?? FdbReadMode.Both; KeyValuePair <Slice, Slice>[] items; bool hasMore; Slice first, last; switch (mode) { case FdbReadMode.Both: { items = GetKeyValueArrayResult(h, out hasMore, out first, out last); break; } case FdbReadMode.Keys: { items = GetKeyValueArrayResultKeysOnly(h, out hasMore, out first, out last); break; } case FdbReadMode.Values: { items = GetKeyValueArrayResultValuesOnly(h, out hasMore, out first, out last); break; } default: { throw new InvalidOperationException(); } } return new FdbRangeChunk(items, hasMore, iteration, reversed, mode, first, last); }, ct )); }
/// <summary>Asynchronously fetch a new page of results</summary> /// <returns>True if Chunk contains a new page of results. False if all results have been read.</returns> public Task <FdbRangeChunk> GetRangeAsync(KeySelector begin, KeySelector end, FdbRangeOptions options, int iteration, bool snapshot, CancellationToken ct) { Contract.Requires(options != null); bool reversed = options.Reverse ?? false; var future = FdbNative.TransactionGetRange(m_handle, begin, end, options.Limit ?? 0, options.TargetBytes ?? 0, options.Mode ?? FdbStreamingMode.Iterator, iteration, snapshot, reversed); return(FdbFuture.CreateTaskFromHandle( future, (h) => { // TODO: quietly return if disposed var chunk = GetKeyValueArrayResult(h, out bool hasMore); return new FdbRangeChunk(hasMore, chunk, iteration, reversed); }, ct )); }
/// <summary>Asynchronously fetch a new page of results</summary> /// <returns>True if Chunk contains a new page of results. False if all results have been read.</returns> public Task <FdbRangeChunk> GetRangeAsync(KeySelector begin, KeySelector end, int limit, bool reversed, int targetBytes, FdbStreamingMode mode, FdbReadMode read, int iteration, bool snapshot, CancellationToken ct) { var future = FdbNative.TransactionGetRange(m_handle, begin, end, limit, targetBytes, mode, iteration, snapshot, reversed); return(FdbFuture.CreateTaskFromHandle( future, (h) => { KeyValuePair <Slice, Slice>[] items; bool hasMore; Slice first, last; switch (read) { case FdbReadMode.Both: { items = GetKeyValueArrayResult(h, out hasMore, out first, out last); break; } case FdbReadMode.Keys: { items = GetKeyValueArrayResultKeysOnly(h, out hasMore, out first, out last); break; } case FdbReadMode.Values: { items = GetKeyValueArrayResultValuesOnly(h, out hasMore, out first, out last); break; } default: { throw new InvalidOperationException(); } } return new FdbRangeChunk(items, hasMore, iteration, reversed, read, first, last); }, ct )); }