/// <summary> /// The number of items in the database. /// </summary> /// <param name="db">The database we are counting items in.</param> /// <returns>The number of items.</returns> public long GetEntriesCount(LightningDatabase db) { MDBStat stat; Lmdb.mdb_stat(_handle, db.Handle(), out stat); return(stat.ms_entries.ToInt64()); }
/// <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) { if (db == null) { throw new ArgumentNullException(nameof(db)); } Lmdb.mdb_del(_handle, db.Handle(), key, value); }
/// <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(nameof(db)); } Lmdb.mdb_put(_handle, db.Handle(), key, value, options); }
/// <summary> /// Tries to get a value by its key. /// </summary> /// <param name="db">Database.</param> /// <param name="key">Key byte array.</param> /// <param name="value">Value byte array if exists.</param> /// <returns>True if key exists, false if not.</returns> public bool TryGet(LightningDatabase db, byte[] key, out byte[] value) { if (db == null) { throw new ArgumentNullException(nameof(db)); } return(Lmdb.mdb_get(_handle, db.Handle(), key, out value) != Lmdb.MDB_NOTFOUND); }
internal IDisposable ConfigureDatabase(LightningTransaction tx, LightningDatabase db) { var pinnedComparer = new ComparerKeepAlive(); if (_comparer != null) { CompareFunction compare = Compare; pinnedComparer.AddComparer(compare); Lmdb.mdb_set_compare(tx.Handle(), db.Handle(), compare); } if (_duplicatesComparer != null) { CompareFunction dupCompare = IsDuplicate; pinnedComparer.AddComparer(dupCompare); Lmdb.mdb_set_dupsort(tx.Handle(), db.Handle(), dupCompare); } return(pinnedComparer); }
public long GetUsedSize(LightningDatabase db) { if (db == null) { throw new ArgumentNullException(nameof(db)); } MDBStat stat; Lmdb.mdb_stat(_handle, db.Handle(), out stat); return(stat.ms_psize * (stat.ms_leaf_pages.ToInt64() + stat.ms_branch_pages.ToInt64() + stat.ms_overflow_pages.ToInt64())); }
/// <summary> /// Creates new instance of LightningCursor /// </summary> /// <param name="db">Database</param> /// <param name="txn">Transaction</param> internal LightningCursor(LightningDatabase db, LightningTransaction txn) { if (db == null) { throw new ArgumentNullException(nameof(db)); } if (txn == null) { throw new ArgumentNullException(nameof(txn)); } Lmdb.mdb_cursor_open(txn.Handle(), db.Handle(), out _handle); Transaction = txn; Transaction.Disposing += Dispose; }
public LightningStats GetStats(LightningDatabase db) { if (db == null) { throw new ArgumentNullException(nameof(db)); } MDBStat stat; Lmdb.mdb_stat(_handle, db.Handle(), out stat); var bytes = stat.ms_psize * (stat.ms_leaf_pages.ToInt64() + stat.ms_branch_pages.ToInt64() + stat.ms_overflow_pages.ToInt64()); return(new LightningStats() { UsedBytes = bytes, BTreeDepth = stat.ms_depth, EntryCount = stat.ms_entries.ToInt64() }); }
/// <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> public void Delete(LightningDatabase db, byte[] key) { Lmdb.mdb_del(_handle, db.Handle(), key); }