コード例 #1
0
ファイル: CursorTests.cs プロジェクト: dl1109783/LMDBWindows
 public void CursorShouldBeCreated()
 {
     _db = _txn.OpenDatabase(configuration: new DatabaseConfiguration {
         Flags = DatabaseOpenFlags.Create
     });
     _txn.CreateCursor(_db).Dispose();
 }
コード例 #2
0
        public void DatabaseShouldBeDropped()
        {
            _env.MaxDatabases = 2;
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase("notmaster", new DatabaseConfiguration {
                Flags = DatabaseOpenFlags.Create
            });

            _txn.Commit();
            _txn.Dispose();
            db.Dispose();

            _txn = _env.BeginTransaction();
            db   = _txn.OpenDatabase("notmaster");

            db.Drop(_txn);
            _txn.Commit();
            _txn.Dispose();

            _txn = _env.BeginTransaction();

            var ex = Assert.Throws <LightningException>(() => _txn.OpenDatabase("notmaster"));

            Assert.Equal(ex.StatusCode, -30798);
        }
コード例 #3
0
        private LightningDatabase CreateCollectionInternal(string name, Type keyType)
        {
            ITransaction transaction = BeginTransactionInternal(null, TransactionBeginFlags.None);

            ValidateTransaction(transaction);

            LightningTransaction lmdbTransaction = (LightningTransaction)transaction.InnerObject;

            LightningDB.DatabaseConfiguration dbOptions = new LightningDB.DatabaseConfiguration();
            dbOptions.Flags = DatabaseOpenFlags.Create;
            //todo: maybe add other integer types too
            if (keyType == typeof(long) || keyType == typeof(ulong) || keyType == typeof(int) || keyType == typeof(uint) || keyType == typeof(short) || keyType == typeof(ushort))
            {
                dbOptions.Flags |= DatabaseOpenFlags.IntegerKey;
            }
            LightningDatabase collectionInstance = lmdbTransaction.OpenDatabase(name, dbOptions);

            if (name != METADATA_COLLECTION)
            {
                StoreCollectionInfo(name, transaction);
            }
            ((LMDBTransaction)transaction).ChangeSize(8192);
            CommitInternal(transaction);

            return(collectionInstance);
        }
コード例 #4
0
        public void DatabaseShouldBeClosed()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase();

            db.Dispose();

            Assert.Equal(false, db.IsOpened);
        }
コード例 #5
0
        public void Init()
        {
            Directory.CreateDirectory(_path);

            _env = new LightningEnvironment(_path, EnvironmentOpenFlags.None);
            _env.Open();

            _txn = _env.BeginTransaction();
            _db  = _txn.OpenDatabase();
        }
コード例 #6
0
        public void DatabaseShouldBeClosed()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase();

            db.Dispose();

            Assert.False(db.IsOpened);
        }
コード例 #7
0
        public void Init()
        {
            Directory.CreateDirectory(_path);

            _env = new LightningEnvironment(_path, EnvironmentOpenFlags.None);
            _env.Open();

            _txn = _env.BeginTransaction();
            _db = _txn.OpenDatabase();
        }
コード例 #8
0
        public DatabaseIOTests(SharedFileSystem fileSystem)
        {
            var path = fileSystem.CreateNewDirectoryForTest();

            _env = new LightningEnvironment(path);
            _env.MaxDatabases = 2;
            _env.Open();

            _txn = _env.BeginTransaction();
            _db = _txn.OpenDatabase(configuration: new DatabaseConfiguration {Flags = DatabaseOpenFlags.Create});
        }
コード例 #9
0
        private LightningDatabase OpenDatabase(LightningTransaction transaction, string database)
        {
            if (_databaseCache.ContainsKey(database))
            {
                return(_databaseCache[database]);
            }
            var db = transaction.OpenDatabase(database);

            _databaseCache[database] = db;
            return(db);
        }
コード例 #10
0
        private void SaveKV(LightningTransaction tx, byte[] key, double value)
        {
            var byteValue = BitConverter.GetBytes(value);

            using (var db = tx.OpenDatabase("kv", new DatabaseConfiguration {
                Flags = DatabaseOpenFlags.Create
            }))
            {
                tx.Put(db, key, byteValue);
                tx.Commit();
            }
        }
コード例 #11
0
        public void DefaultDatabaseShouldBeOpened()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            //arrange

            //act
            var db = _txn.OpenDatabase(null, DatabaseOpenFlags.None);

            //assert
            Assert.AreEqual(true, db.IsOpened);
        }
コード例 #12
0
        public void DefaultDatabaseShouldBeOpened()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            //arrange

            //act
            var db = _txn.OpenDatabase(null, DatabaseOpenFlags.None);

            //assert
            Assert.AreEqual(true, db.IsOpened);
        }
コード例 #13
0
        public void DatabaseShouldBeCreated()
        {
            var dbName = "test";
            _env.MapDatabases = 2;
            _env.Open();
            _txn = _env.BeginTransaction();
            //arrange

            //act
            _txn.OpenDatabase(dbName, DatabaseOpenFlags.Create);

            //assert
        }
コード例 #14
0
        public DatabaseIOTests(SharedFileSystem fileSystem)
        {
            var path = fileSystem.CreateNewDirectoryForTest();

            _env = new LightningEnvironment(path);
            _env.MaxDatabases = 2;
            _env.Open();

            _txn = _env.BeginTransaction();
            _db  = _txn.OpenDatabase(configuration: new DatabaseConfiguration {
                Flags = DatabaseOpenFlags.Create
            });
        }
コード例 #15
0
ファイル: DatabaseTests.cs プロジェクト: malyn/Lightning.NET
        public void DefaultDatabaseShouldBeClosed()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(null, new DatabaseOptions { Flags = DatabaseOpenFlags.None });
            //arrange

            //act
            db.Close();

            //assert
            Assert.AreEqual(false, db.IsOpened);
        }
コード例 #16
0
        public void DefaultDatabaseShouldBeDropped()
        {
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(null, DatabaseOpenFlags.None);

            //arrange

            //act
            _txn.DropDatabase(db, true);

            //assert
            Assert.AreEqual(false, db.IsOpened);
        }
コード例 #17
0
        public void DatabaseShouldBeCreated()
        {
            var dbName = "test";

            _env.MaxDatabases = 2;
            _env.Open();
            _txn = _env.BeginTransaction();
            //arrange

            //act
            _txn.OpenDatabase(dbName, DatabaseOpenFlags.Create);

            //assert
        }
コード例 #18
0
        public void TruncatingTheDatabase()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase();

            _txn.Put(db, "hello", "world");
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db   = _txn.OpenDatabase();
            db.Truncate(_txn);
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db   = _txn.OpenDatabase();
            var result = _txn.Get(db, UTF8.GetBytes("hello"));

            Assert.Null(result);
        }
コード例 #19
0
        public void CanCommitTransactionToNamedDatabase()
        {
            using (var db = _txn.OpenDatabase("test", new DatabaseConfiguration {
                Flags = DatabaseOpenFlags.Create
            }))
            {
                _txn.Put(db, "key1", "value");

                _txn.Commit();
            }

            using (var txn2 = _env.BeginTransaction())
            {
                using (var db = txn2.OpenDatabase("test"))
                {
                    var value = txn2.Get(db, "key1");
                    Assert.Equal("value", value);
                }
            }
        }
コード例 #20
0
        public void TruncatingTheDatabase()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase();

            _txn.Put(db, "hello", "world");
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db   = _txn.OpenDatabase();
            db.Truncate(_txn);
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db   = _txn.OpenDatabase();
            var result = _txn.Get(db, UTF8.GetBytes("hello"));

            Assert.Equal(MDBResultCode.NotFound, result.resultCode);
        }
コード例 #21
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));
             }
         }
     }
 }
コード例 #22
0
 public static bool PutVulnerabilities(List <OSSIndexVulnerability> vulnerabilities)
 {
     if (!Environment.IsOpened)
     {
         Environment.MapSize = 2L * 1024L * 1024L * 1024L;
         Environment.Open(EnvironmentOpenFlags.None);
     }
     using (LightningTransaction tx = Environment.BeginTransaction())
         using (LightningDatabase db = tx.OpenDatabase(null, new DatabaseConfiguration {
             Flags = DatabaseOpenFlags.Create
         }))
         {
             try
             {
                 foreach (OSSIndexVulnerability v in vulnerabilities)
                 {
                     /*
                      * using (MemoryStream ms = new MemoryStream())
                      * using (BsonWriter writer = new BsonWriter(ms))
                      * {
                      *  JsonSerializer serializer = new JsonSerializer();
                      *  serializer.Serialize(writer, v);
                      * }
                      */
                     tx.Put(db, Encoding.UTF8.GetBytes(string.IsNullOrEmpty(v.Vid) ? v.Url : v.Vid + "#" + v.Group), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(v)));
                 }
                 tx.Commit();
                 logger.Debug("Committed {0} vulnerabilities to database.", vulnerabilities.Count);
                 return(true);
             }
             catch (LightningException e)
             {
                 logger.Error("Exception thrown attempting to write vulnerabilities to database.");
                 logger.Error(e);
                 return(false);
             }
         }
 }
コード例 #23
0
 public static bool GetVulnerability(string id, out OSSIndexVulnerability v)
 {
     if (!Environment.IsOpened)
     {
         Environment.MapSize = 2L * 1024L * 1024L * 1024L;
         Environment.Open(EnvironmentOpenFlags.None);
     }
     using (LightningTransaction tx = Environment.BeginTransaction(TransactionBeginFlags.ReadOnly))
     {
         LightningDatabase db  = tx.OpenDatabase();
         byte[]            ret = null;
         if (!tx.TryGet(db, Encoding.UTF8.GetBytes(id), out ret))
         {
             v = null;
             return(false);
         }
         else
         {
             v = JsonConvert.DeserializeObject <OSSIndexVulnerability>(Encoding.UTF8.GetString(ret));
             return(true);
         }
     }
 }
コード例 #24
0
        public void CanCountTransactionEntries()
        {
            //arrange
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(null, new DatabaseOptions { Flags = DatabaseOpenFlags.None });

            const int entriesCount = 10;
            for (var i = 0; i < entriesCount; i++)
                _txn.Put(db, i.ToString(), i.ToString());

            //act
            var count = _txn.GetEntriesCount(db);

            //assert;
            Assert.AreEqual(entriesCount, count);
        }
コード例 #25
0
        public void TransactionShouldSupportCustomDupSorter()
        {
            //arrange
            Func<int, int, int> comparison = (l, r) => -Math.Sign(l - r);

            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(
                options: new DatabaseOptions 
                { 
                    Flags = DatabaseOpenFlags.DuplicatesFixed,
                    DuplicatesSort = b => b.FromFunc(comparison) 
                });

            var valuesUnsorted = new int[] { 2, 10, 5, 0 };
            var valuesSorted = valuesUnsorted.ToArray();
            Array.Sort(valuesSorted, new Comparison<int>(comparison));

            //act
            using (var c = _txn.CreateCursor(db))
                c.PutMultiple(123, valuesUnsorted);

            //assert
            using (var c = _txn.CreateCursor(db))
            {
                int order = 0;

                KeyValuePair<int, int> pair;
                while (c.MoveNextDuplicate(out pair))
                    Assert.AreEqual(valuesSorted[order++], pair.Value);
            }
        }
コード例 #26
0
        public void DefaultDatabaseShouldBeDropped()
        {
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(null, DatabaseOpenFlags.None);
            //arrange

            //act
            _txn.DropDatabase(db, true);

            //assert
            Assert.AreEqual(false, db.IsOpened);
        }
コード例 #27
0
        public void TransactionShouldSupportCustomComparer()
        {
            //arrange
            Func<int, int, int> comparison = (l, r) => -Math.Sign(l - r);

            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase(
                options: new DatabaseOptions { Compare = b => b.FromFunc(comparison) });

            var keysUnsorted = new int[] { 2, 10, 5 };
            var keysSorted = keysUnsorted.ToArray();
            Array.Sort(keysSorted, new Comparison<int>(comparison));

            //act
            for (var i = 0; i < keysUnsorted.Length; i++)
                _txn.Put(keysUnsorted[i], i);

            //assert
            using (var c = _txn.CreateCursor(db))
            {
                int order = 0;

                KeyValuePair<int, int> pair;
                while (c.MoveNext(out pair))
                    Assert.AreEqual(keysSorted[order++], pair.Key);
            }
        }
コード例 #28
0
        public void TruncatingTheDatabase()
        {
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase();

            _txn.Put(db, "hello", "world");
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db = _txn.OpenDatabase();
            db.Truncate(_txn);
            _txn.Commit();
            _txn.Dispose();
            _txn = _env.BeginTransaction();
            db = _txn.OpenDatabase();
            var result = _txn.Get(db, UTF8.GetBytes("hello"));

            Assert.Null(result);
        }
コード例 #29
0
        public void DatabaseShouldBeDropped()
        {
            _env.MaxDatabases = 2;
            _env.Open();
            _txn = _env.BeginTransaction();
            var db = _txn.OpenDatabase("notmaster", new DatabaseConfiguration {Flags = DatabaseOpenFlags.Create});
            _txn.Commit();
            _txn.Dispose();
            db.Dispose();

            _txn = _env.BeginTransaction();
            db = _txn.OpenDatabase("notmaster");

            db.Drop(_txn);
            _txn.Commit();
            _txn.Dispose();

            _txn = _env.BeginTransaction();

            var ex = Assert.Throws<LightningException>(() => _txn.OpenDatabase("notmaster"));

            Assert.Equal(ex.StatusCode, -30798);
        }