public KeyValuePair<byte[], byte[]>? MoveToFirstAfter(byte[] key) { using(var marshalKey = new MarshalValueStructure(key)) return this.Get(CursorOperation.SetRange, marshalKey.ValueStructure); }
public KeyValuePair<byte[], byte[]>? MoveToFirstValueAfter(byte[] key, byte[] value) { using (var marshalKey = new MarshalValueStructure(key)) using (var marshalValue = new MarshalValueStructure(value)) return this.Get(CursorOperation.GetBothRange, marshalKey.ValueStructure, marshalValue.ValueStructure); }
public void Put(byte[] key, byte[] value, PutOptions options) { using(var keyMarshalStruct = new MarshalValueStructure(key)) using (var valueMarshalStruct = new MarshalValueStructure(value)) { var keyStruct = keyMarshalStruct.ValueStructure; var valueStruct = valueMarshalStruct.ValueStructure; NativeMethods.Execute(lib => lib.mdb_cursor_put(_handle, ref keyStruct, ref valueStruct, options)); } }
/// <summary> /// Delete items from a database. /// This function removes key/data pairs from the database. /// If the database does not support sorted duplicate data items (MDB_DUPSORT) the data parameter is ignored. /// If the database supports sorted duplicates and the data parameter is NULL, all of the duplicate data items for the key will be deleted. /// Otherwise, if the data parameter is non-NULL only the matching data item will be deleted. /// This function will return MDB_NOTFOUND if the specified key/data pair is not in the database. /// </summary> /// <param name="db">A database handle returned by mdb_dbi_open()</param> /// <param name="key">The key to delete from the database</param> /// <param name="value">The data to delete (optional)</param> public void Delete(LightningDatabase db, byte[] key, byte[] value = null) { if (db == null) throw new ArgumentNullException("db"); using (var keyMarshalStruct = new MarshalValueStructure(key)) { var keyStructure = keyMarshalStruct.ValueStructure; if (value != null) { using (var valueMarshalStruct = new MarshalValueStructure(value)) { var valueStructure = valueMarshalStruct.ValueStructure; NativeMethods.Execute(lib => lib.mdb_del(_handle, db._handle, ref keyStructure, ref valueStructure)); return; } } NativeMethods.Execute(lib => lib.mdb_del(_handle, db._handle, ref keyStructure, IntPtr.Zero)); } }
/// <summary> /// Put data into a database. /// </summary> /// <param name="db">Database.</param> /// <param name="key">Key byte array.</param> /// <param name="value">Value byte array.</param> /// <param name="options">Operation options (optional).</param> public void Put(LightningDatabase db, byte[] key, byte[] value, PutOptions options = PutOptions.None) { if (db == null) throw new ArgumentNullException("db"); using (var keyStructureMarshal = new MarshalValueStructure(key)) using (var valueStructureMarshal = new MarshalValueStructure(value)) { var keyStruct = keyStructureMarshal.ValueStructure; var valueStruct = valueStructureMarshal.ValueStructure; NativeMethods.Execute(lib => lib.mdb_put(_handle, db._handle, ref keyStruct, ref valueStruct, options)); } }
private bool TryGetInternal(UInt32 dbi, byte[] key, out Func<byte[]> valueFactory) { valueFactory = null; using (var keyMarshalStruct = new MarshalValueStructure(key)) { var valueStruct = default(ValueStructure); var keyStructure = keyMarshalStruct.ValueStructure; var res = NativeMethods.Read(lib => lib.mdb_get(_handle, dbi, ref keyStructure, out valueStruct)); var exists = res != NativeMethods.MDB_NOTFOUND; if (exists) valueFactory = () => valueStruct.ToByteArray(res); return exists; } }