示例#1
0
        private static byte[][] PopulateMultipleCursorValues(LightningCursor cursor, string key = "TestKey")
        {
            var values = Enumerable.Range(1, 5).Select(BitConverter.GetBytes).ToArray();
            var result = cursor.Put(UTF8.GetBytes(key), values);

            Assert.Equal(MDBResultCode.Success, result);
            var notDuplicate = values[0];

            result = cursor.Put(notDuplicate, notDuplicate, CursorPutOptions.NoDuplicateData);
            Assert.Equal(MDBResultCode.Success, result);
            return(values);
        }
示例#2
0
 public void CloseCursor(LightningCursor cursor)
 {
     try
     {
         CloseCursor(cursor._handle);
     }
     finally
     {
         bool value;
         _cursors.TryRemove(cursor._handle, out value);
     }
 }
示例#3
0
        private static byte[][] PopulateCursorValues(LightningCursor cursor, int count = 5, string keyPrefix = "key")
        {
            var keys = Enumerable.Range(1, count)
                       .Select(i => UTF8.GetBytes(keyPrefix + i))
                       .ToArray();

            foreach (var k in keys)
            {
                var result = cursor.Put(k, k, CursorPutOptions.None);
                Assert.Equal(MDBResultCode.Success, result);
            }

            return(keys);
        }
        public IDataReader <TKey, TValue> GetAllDocuments <TKey, TValue>(string collection)
        {
            if (string.IsNullOrEmpty(collection))
            {
                throw new ArgumentException("Collection name can not be null or empty.");
            }

            if (!CollectionExists(collection))
            {
                throw new ArgumentException("Specified collection not found in " + GetFileInfo() + " Collection = " + collection);
            }

            ReadTransaction transaction = null;

            try
            {
                if (_readerTransaction != null)
                {
                    if (_readerTransaction.ShouldRenew)
                    {
                        _readerTransaction.WaitUntillFree();
                    }
                }

                lock (_readerTransactionLock)
                {
                    if (_readerTransaction == null || !_readerTransaction.Running)
                    {
                        _readerTransaction = new ReadTransaction(BeginTransaction(null, true));
                    }

                    transaction = _readerTransaction;
                    transaction.Enter();
                }
                ValidateTransaction(transaction.Transaction);
                LightningTransaction lmdbTransaction = (LightningTransaction)transaction.Transaction.InnerObject;

                LightningCursor cursor = lmdbTransaction.CreateCursor(_collectionTable[collection].Collection);
                LMDBDataReader <TKey, TValue> reader = new LMDBDataReader <TKey, TValue>(cursor.GetEnumerator(), _environment, _collectionTable[collection].Collection);
                return(reader);
            }
            finally
            {
                if (transaction != null)
                {
                    transaction.Exit();
                }
            }
        }
示例#5
0
 private static long ReadInternal(IEnumerable <uint> ids, PerfTracker perfTracker, LightningEnvironment env,
                                  LightningDatabase db)
 {
     using (var tx = env.BeginTransaction(LightningDB.TransactionBeginFlags.ReadOnly))
         using (var cursor = new LightningCursor(db, tx))
         {
             long v = 0;
             foreach (var id in ids)
             {
                 var value = cursor.MoveTo(Encoding.UTF8.GetBytes(id.ToString("0000000000000000")));
                 v += value.Value.Length;
                 //Debug.Assert(value != null);
             }
             return(v);
         }
 }
示例#6
0
 public static void PrintAllVulnerabilities()
 {
     if (!Environment.IsOpened)
     {
         Environment.MapSize = 2L * 1024L * 1024L * 1024L;
         Environment.Open(EnvironmentOpenFlags.None);
     }
     using (LightningTransaction tx = Environment.BeginTransaction(TransactionBeginFlags.ReadOnly))
     {
         LightningDatabase db = tx.OpenDatabase();
         using (LightningCursor cursor = tx.CreateCursor(db))
         {
             foreach (KeyValuePair <byte[], byte[]> r in cursor)
             {
                 string id = Encoding.UTF8.GetString(r.Key);
                 OSSIndexVulnerability v = JsonConvert.DeserializeObject <OSSIndexVulnerability>(Encoding.UTF8.GetString(r.Value));
                 logger.Info("Id: {0}), Package: {1}, CVEs: {2}", id, v.Name, string.Join(" ", v.CVEs));
             }
         }
     }
 }
示例#7
0
 public CursorEnumerator(LightningCursor cur)
 {
     _cur = cur;
 }
示例#8
0
 public CursorGenericEnumerator(LightningCursor cur)
 {
     _enumerator = new CursorEnumerator(cur);
 }