/// <summary>Returns a key that is immediately after the packed representation of this tuple</summary> /// <remarks>This is the equivalent of manually packing the tuple and incrementing the resulting slice</remarks> public static Slice Increment([NotNull] this IFdbTuple tuple) { if (tuple == null) { throw new ArgumentNullException("tuple"); } return(FdbKey.Increment(tuple.ToSlice())); }
public FdbRangeQuery <TId> LookupLessThan([NotNull] IFdbReadOnlyTransaction trans, TValue value, bool orEqual, bool reverse = false) { var prefix = this.Subspace.Keys.EncodePartial(value); if (orEqual) { prefix = FdbKey.Increment(prefix); } var space = new KeySelectorPair( KeySelector.FirstGreaterOrEqual(this.Subspace.ToRange().Begin), KeySelector.FirstGreaterThan(prefix) ); return(trans .GetRange(space, new FdbRangeOptions { Reverse = reverse }) .Select((kvp) => this.Subspace.Keys.Decode(kvp.Key).Item2)); }
public FdbRangeQuery <TId> LookupGreaterThan([NotNull] IFdbReadOnlyTransaction trans, TValue value, bool orEqual, bool reverse = false) { var prefix = this.Location.Partial.EncodeKey(value); if (!orEqual) { prefix = FdbKey.Increment(prefix); } var space = new FdbKeySelectorPair( FdbKeySelector.FirstGreaterThan(prefix), this.Location.ToSelectorPair().End ); return(trans .GetRange(space, new FdbRangeOptions { Reverse = reverse }) .Select((kvp) => this.Location.DecodeKey(kvp.Key).Item2)); }
public void Test_FdbKey_Increment() { var key = FdbKey.Increment(Slice.FromByteString("Hello")); Assert.That(key.ToString(), Is.EqualTo("Hellp")); key = FdbKey.Increment(Slice.FromByteString("Hello\x00")); Assert.That(key.ToString(), Is.EqualTo("Hello<01>")); key = FdbKey.Increment(Slice.FromByteString("Hello\xFE")); Assert.That(key.ToString(), Is.EqualTo("Hello<FF>")); key = FdbKey.Increment(Slice.FromByteString("Hello\xFF")); Assert.That(key.ToString(), Is.EqualTo("Hellp"), "Should remove training \\xFF"); key = FdbKey.Increment(Slice.FromByteString("A\xFF\xFF\xFF")); Assert.That(key.ToString(), Is.EqualTo("B"), "Should truncate all trailing \\xFFs"); // corner cases Assert.That(() => FdbKey.Increment(Slice.Nil), Throws.InstanceOf <ArgumentException>().With.Property("ParamName").EqualTo("slice")); Assert.That(() => FdbKey.Increment(Slice.Empty), Throws.InstanceOf <ArgumentException>()); Assert.That(() => FdbKey.Increment(Slice.FromByteString("\xFF")), Throws.InstanceOf <ArgumentException>()); }