Beispiel #1
0
        /// <summary>
        /// Opens a database in context of this transaction.
        /// </summary>
        /// <param name="name">Database name (optional). If null then the default name is used.</param>
        /// <param name="configuration">Database open options.</param>
        /// <returns>Created database wrapper.</returns>
        public LightningDatabase OpenDatabase(string name = null, DatabaseConfiguration configuration = null)
        {
            configuration = configuration ?? new DatabaseConfiguration();
            var db = new LightningDatabase(name, this, configuration);

            return(db);
        }
Beispiel #2
0
        /// <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());
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <summary>
        /// Check whether data exists in database.
        /// </summary>
        /// <param name="db">Database.</param>
        /// <param name="key">Key.</param>
        /// <returns>True if key exists, false if not.</returns>
        public bool ContainsKey(LightningDatabase db, byte[] key)
        {
            if (db == null)
            {
                throw new ArgumentNullException(nameof(db));
            }

            byte[] value;
            return(TryGet(db, key, out value));
        }
Beispiel #7
0
        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()));
        }
Beispiel #8
0
        /// <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;
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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()
            });
        }
Beispiel #11
0
 /// <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);
 }
Beispiel #12
0
 /// <summary>
 /// Get value from a database.
 /// </summary>
 /// <param name="db">Database </param>
 /// <param name="key">Key byte array.</param>
 /// <returns>Requested value's byte array if exists, or null if not.</returns>
 public byte[] Get(LightningDatabase db, byte[] key)
 {
     byte[] value;
     TryGet(db, key, out value);
     return(value);
 }
Beispiel #13
0
 /// <summary>
 /// Create a cursor.
 /// Cursors are associated with a specific transaction and database and may not span threads.
 /// </summary>
 /// <param name="db">A database.</param>
 public LightningCursor CreateCursor(LightningDatabase db)
 {
     return(new LightningCursor(db, this));
 }
Beispiel #14
0
 /// <summary>
 /// Truncates all data from the database.
 /// </summary>
 public void TruncateDatabase(LightningDatabase database)
 {
     database.Truncate(this);
 }
Beispiel #15
0
 /// <summary>
 /// Drops the database.
 /// </summary>
 public void DropDatabase(LightningDatabase database)
 {
     database.Drop(this);
 }