public void TransactionShouldSupportCustomDupSorter() { Func <int, int, int> comparison = (l, r) => - Math.Sign(l - r); var txn = _env.BeginTransaction(); var options = new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create | DatabaseOpenFlags.DuplicatesFixed }; Func <MDBValue, MDBValue, int> compareWith = (l, r) => comparison(BitConverter.ToInt32(l.CopyToNewArray(), 0), BitConverter.ToInt32(r.CopyToNewArray(), 0)); options.FindDuplicatesWith(Comparer <MDBValue> .Create(new Comparison <MDBValue>(compareWith))); var db = txn.OpenDatabase(configuration: options); var valuesUnsorted = new [] { 2, 10, 5, 0 }; var valuesSorted = valuesUnsorted.ToArray(); Array.Sort(valuesSorted, new Comparison <int>(comparison)); using (var c = txn.CreateCursor(db)) c.Put(BitConverter.GetBytes(123), valuesUnsorted.Select(BitConverter.GetBytes).ToArray()); using (var c = txn.CreateCursor(db)) { int order = 0; while (c.Next() == MDBResultCode.Success) { Assert.Equal(valuesSorted[order++], BitConverter.ToInt32(c.GetCurrent().value.CopyToNewArray(), 0)); } } }
public void TransactionShouldSupportCustomDupSorter() { Func<int, int, int> comparison = (l, r) => -Math.Sign(l - r); var txn = _env.BeginTransaction(); var options = new DatabaseConfiguration {Flags = DatabaseOpenFlags.Create | DatabaseOpenFlags.DuplicatesFixed}; Func<byte[], byte[], int> compareWith = (l, r) => comparison(BitConverter.ToInt32(l, 0), BitConverter.ToInt32(r, 0)); options.FindDuplicatesWith(Comparer<byte[]>.Create(new Comparison<byte[]>(compareWith))); var db = txn.OpenDatabase(configuration: options); var valuesUnsorted = new [] { 2, 10, 5, 0 }; var valuesSorted = valuesUnsorted.ToArray(); Array.Sort(valuesSorted, new Comparison<int>(comparison)); using (var c = txn.CreateCursor(db)) c.PutMultiple(BitConverter.GetBytes(123), valuesUnsorted.Select(BitConverter.GetBytes).ToArray()); using (var c = txn.CreateCursor(db)) { int order = 0; while (c.MoveNext()) Assert.Equal(valuesSorted[order++], BitConverter.ToInt32(c.Current.Value, 0)); } }