/// <summary>Extract a chunk of result from a completed Future</summary> /// <param name="h">Handle to the completed Future</param> /// <param name="more">Receives true if there are more result, or false if all results have been transmitted</param> /// <param name="first">Receives the first key in the page, or default if page is empty</param> /// <param name="last">Receives the last key in the page, or default if page is empty</param> /// <returns>Array of key/value pairs, or an exception</returns> private static KeyValuePair <Slice, Slice>[] GetKeyValueArrayResultValuesOnly(FutureHandle h, out bool more, out Slice first, out Slice last) { var err = FdbNative.FutureGetKeyValueArrayValuesOnly(h, out var result, out more, out first, out last); Fdb.DieOnError(err); //note: result can only be null if an error occured! Contract.Ensures(result != null); return(result); }
public long GetCommittedVersion() { var err = FdbNative.TransactionGetCommittedVersion(m_handle, out long version); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[" + m_id + "].GetCommittedVersion() => err=" + err + ", version=" + version); #endif Fdb.DieOnError(err); return(version); }
private static KeyValuePair <Slice, Slice>[] GetKeyValueArrayResult(FutureHandle h, out bool more) { KeyValuePair <Slice, Slice>[] result; var err = FdbNative.FutureGetKeyValueArray(h, out result, out more); Fdb.DieOnError(err); //note: result can only be null if an error occured! Contract.Ensures(result != null); return(result); }
/// <summary>Extract a chunk of result from a completed Future</summary> /// <param name="h">Handle to the completed Future</param> /// <param name="more">Receives true if there are more result, or false if all results have been transmitted</param> /// <param name="first">Receives the first key in the page, or default if page is empty</param> /// <param name="last">Receives the last key in the page, or default if page is empty</param> /// <returns>Array of key/value pairs, or an exception</returns> private static KeyValuePair <Slice, Slice>[] GetKeyValueArrayResultKeysOnly(FutureHandle h, out bool more, out Slice first, out Slice last) { var err = FdbNative.FutureGetKeyValueArrayKeysOnly(h, out var result, out more); Fdb.DieOnError(err); //note: result can only be null if an error occured! Contract.Ensures(result != null); first = result.Length > 0 ? result[0].Key : default; last = result.Length > 0 ? result[result.Length - 1].Key : default; return(result); }
private static VersionStamp GetVersionStampResult(FutureHandle h) { Contract.Requires(h != null); var err = FdbNative.FutureGetVersionStamp(h, out VersionStamp stamp); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[" + m_id + "].FutureGetVersionStamp() => err=" + err + ", vs=" + stamp + ")"); #endif Fdb.DieOnError(err); return(stamp); }
private static Slice GetKeyResult(FutureHandle h) { Contract.Requires(h != null); var err = FdbNative.FutureGetKey(h, out ReadOnlySpan <byte> result); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[].GetKeyResult() => err=" + err + ", result=" + result.ToString()); #endif Fdb.DieOnError(err); return(Slice.Copy(result)); }
//TODO: this is redundant with GetApproximateSize which does the exact book-keeping (but is async!). Should we keep it? or get remove it? #endregion #region Options... /// <inheritdoc /> public void SetOption(FdbTransactionOption option, ReadOnlySpan <byte> data) { Fdb.EnsureNotOnNetworkThread(); unsafe { fixed(byte *ptr = data) { Fdb.DieOnError(FdbNative.TransactionSetOption(m_handle, option, ptr, data.Length)); } } }
public void SetOption(FdbDatabaseOption option, Slice data) { Fdb.EnsureNotOnNetworkThread(); unsafe { fixed(byte *ptr = data) { Fdb.DieOnError(FdbNative.DatabaseSetOption(m_handle, option, ptr, data.Count)); } } }
private static bool TryGetValueResult(FutureHandle h, out Slice result) { Contract.Requires(h != null); var err = FdbNative.FutureGetValue(h, out bool present, out result); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[].TryGetValueResult() => err=" + err + ", present=" + present + ", valueLength=" + result.Count); #endif Fdb.DieOnError(err); return(present); }
private static string[] GetStringArrayResult(FutureHandle h) { Contract.Requires(h != null); var err = FdbNative.FutureGetStringArray(h, out var result); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[].FutureGetStringArray() => err=" + err + ", results=" + (result == null ? "<null>" : result.Length.ToString())); #endif Fdb.DieOnError(err); Contract.Ensures(result != null); // can only be null in case of an error return(result !); }
private static Slice GetValueResultBytes(FutureHandle h) { Contract.Debug.Requires(h != null); var err = FdbNative.FutureGetValue(h, out bool present, out ReadOnlySpan <byte> result); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[].TryGetValueResult() => err=" + err + ", present=" + present + ", valueLength=" + result.Count); #endif Fdb.DieOnError(err); return(present ? Slice.Copy(result) : Slice.Nil); }
public Task <long> GetReadVersionAsync(CancellationToken ct) { var future = FdbNative.TransactionGetReadVersion(m_handle); return(FdbFuture.CreateTaskFromHandle(future, (h) => { var err = FdbNative.FutureGetVersion(h, out long version); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[" + m_id + "].GetReadVersion() => err=" + err + ", version=" + version); #endif Fdb.DieOnError(err); return version; }, ct )); }
public void SetOption(FdbDatabaseOption option, Slice data) { Fdb.EnsureNotOnNetworkThread(); unsafe { if (data.IsNull) { Fdb.DieOnError(FdbNative.DatabaseSetOption(m_handle, option, null, 0)); } else { fixed(byte *ptr = data.Array) { Fdb.DieOnError(FdbNative.DatabaseSetOption(m_handle, option, ptr + data.Offset, data.Count)); } } } }
/// <inheritdoc /> public Task <long> GetApproximateSizeAsync(CancellationToken ct) { // API was introduced in 6.2 if (Fdb.ApiVersion < 620) { throw new NotSupportedException($"The GetApproximateSize method is only available for version 6.2 or greater. Your application has selected API version {Fdb.ApiVersion} which is too low. You willl need to select API version 620 or greater."); } //TODO: for lesser version, maybe we could return our own estimation? var future = FdbNative.TransactionGetReadVersion(m_handle); return(FdbFuture.CreateTaskFromHandle(future, (h) => { var err = FdbNative.FutureGetInt64(h, out long size); #if DEBUG_TRANSACTIONS Debug.WriteLine("FdbTransaction[" + m_id + "].GetApproximateSize() => err=" + err + ", size=" + size); #endif Fdb.DieOnError(err); return size; }, ct )); }
/// <inheritdoc /> public void AddConflictRange(ReadOnlySpan <byte> beginKeyInclusive, ReadOnlySpan <byte> endKeyExclusive, FdbConflictRangeType type) { FdbError err = FdbNative.TransactionAddConflictRange(m_handle, beginKeyInclusive, endKeyExclusive, type); Fdb.DieOnError(err); }
public void AddConflictRange(Slice beginKeyInclusive, Slice endKeyExclusive, FdbConflictRangeType type) { FdbError err = FdbNative.TransactionAddConflictRange(m_handle, beginKeyInclusive, endKeyExclusive, type); Fdb.DieOnError(err); }