Example #1
0
        public void Enumerator()
        {
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");
            this.InnerPut(writeOptions, "key2", "value2");
            this.InnerPut(writeOptions, "key3", "value3");

            var    entries     = new List <KeyValuePair <string, string> >();
            var    readOptions = LevelDBInterop.leveldb_readoptions_create();
            IntPtr iter        = LevelDBInterop.leveldb_create_iterator(Database, readOptions);

            for (LevelDBInterop.leveldb_iter_seek_to_first(iter);
                 LevelDBInterop.leveldb_iter_valid(iter) == 1;
                 LevelDBInterop.leveldb_iter_next(iter))
            {
                IntPtr len;
                string key   = GetValue(LevelDBInterop.leveldb_iter_key(iter, out len), len);
                string value = GetValue(LevelDBInterop.leveldb_iter_value(iter, out len), len);
                var    entry = new KeyValuePair <string, string>(key, value);
                entries.Add(entry);
            }
            LevelDBInterop.leveldb_iter_destroy(iter);
            LevelDBInterop.leveldb_readoptions_destroy(readOptions);

            Assert.Equal(3, entries.Count);
            Assert.Equal("key1", entries[0].Key);
            Assert.Equal("value1", entries[0].Value);
            Assert.Equal("key2", entries[1].Key);
            Assert.Equal("value2", entries[1].Value);
            Assert.Equal("key3", entries[2].Key);
            Assert.Equal("value3", entries[2].Value);

            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);
        }
Example #2
0
        public void Snapshot()
        {
            // modify db
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");
            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);

            // create snapshot
            var snapshot = LevelDBInterop.leveldb_create_snapshot(Database);

            // modify db again
            writeOptions = LevelDBInterop.leveldb_writeoptions_create();
            this.InnerPut(writeOptions, "key2", "value2");
            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);

            // read from snapshot
            var readOptions = LevelDBInterop.leveldb_readoptions_create();

            LevelDBInterop.leveldb_readoptions_set_snapshot(readOptions, snapshot);
            var val1 = this.InnerGet(readOptions, "key1");

            Assert.Equal("value1", val1);
            var val2 = this.InnerGet(readOptions, "key2");

            Assert.Null(val2);
            LevelDBInterop.leveldb_readoptions_destroy(readOptions);

            // release snapshot
            LevelDBInterop.leveldb_release_snapshot(Database, snapshot);
            snapshot = IntPtr.Zero;
        }
Example #3
0
        public void WriteBatch()
        {
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");

            var writeBatch = LevelDBInterop.leveldb_writebatch_create();

            this.InnerBatchDelete(writeBatch, "key1");
            this.InnerBatchPut(writeBatch, "key2", "value2");
            IntPtr error;

            LevelDBInterop.leveldb_write(Database, writeOptions, writeBatch, out error);
            LevelDBException.Check(error);

            var readOptions = LevelDBInterop.leveldb_readoptions_create();
            var value1      = this.InnerGet(readOptions, "key1");

            Assert.Null(value1);
            var value2 = this.InnerGet(readOptions, "key2");

            Assert.Equal("value2", value2);

            this.InnerBatchDelete(writeBatch, "key2");
            LevelDBInterop.leveldb_writebatch_clear(writeBatch);
            LevelDBInterop.leveldb_write(Database, writeOptions, writeBatch, out error);
            LevelDBException.Check(error);
            value2 = this.InnerGet(readOptions, "key2");
            Assert.Equal("value2", value2);

            LevelDBInterop.leveldb_writebatch_destroy(writeBatch);
            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);
            LevelDBInterop.leveldb_writeoptions_destroy(readOptions);
        }
Example #4
0
        public void Get()
        {
            var options = LevelDBInterop.leveldb_readoptions_create();

            this.InnerPut(options, "key1", "value1");
            var value1 = this.InnerGet(options, "key1");

            Assert.Equal("value1", value1);

            this.InnerPut(options, "key2", "value2");
            var value2 = this.InnerGet(options, "key2");

            Assert.Equal("value2", value2);

            this.InnerPut(options, "key3", "value3");
            var value3 = this.InnerGet(options, "key3");

            Assert.Equal("value3", value3);

            // verify checksums
            LevelDBInterop.leveldb_readoptions_set_verify_checksums(options, 1);
            value1 = this.InnerGet(options, "key1");
            Assert.Equal("value1", value1);

            // no fill cache
            LevelDBInterop.leveldb_readoptions_set_fill_cache(options, 0);
            value2 = this.InnerGet(options, "key2");
            Assert.Equal("value2", value2);

            LevelDBInterop.leveldb_readoptions_destroy(options);
        }
Example #5
0
        public void IsValid()
        {
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");

            var    readOptions = LevelDBInterop.leveldb_readoptions_create();
            IntPtr iter        = LevelDBInterop.leveldb_create_iterator(Database, readOptions);

            LevelDBInterop.leveldb_iter_seek_to_last(iter);
            Assert.True(LevelDBInterop.leveldb_iter_valid(iter) == 1);

            LevelDBInterop.leveldb_iter_next(iter);
            Assert.False(LevelDBInterop.leveldb_iter_valid(iter) == 1);
        }
Example #6
0
        public void Reopen()
        {
            LevelDBInterop.leveldb_close(Database);
            Database = IntPtr.Zero;

            var    options = LevelDBInterop.leveldb_options_create();
            IntPtr error;

            Database = LevelDBInterop.leveldb_open(options, DatabasePath, out error);
            LevelDBException.Check(error);
            var readOptions = LevelDBInterop.leveldb_readoptions_create();

            this.InnerGet(readOptions, "key1");
            LevelDBInterop.leveldb_readoptions_destroy(readOptions);
        }
Example #7
0
        public void Delete()
        {
            var writeOptions = LevelDBInterop.leveldb_writeoptions_create();

            this.InnerPut(writeOptions, "key1", "value1");

            var readOptions = LevelDBInterop.leveldb_readoptions_create();
            var value1      = this.InnerGet(readOptions, "key1");

            Assert.Equal("value1", value1);
            this.InnerDelete(writeOptions, "key1");
            value1 = this.InnerGet(readOptions, "key1");
            Assert.Null(value1);

            LevelDBInterop.leveldb_writeoptions_destroy(writeOptions);
            LevelDBInterop.leveldb_readoptions_destroy(readOptions);
        }
Example #8
0
 /// <summary>
 /// 初始化一个 <see cref="Aoite.LevelDB.ReadOptions"/> 类的新实例。
 /// </summary>
 public ReadOptions()
 {
     _handle = LevelDBInterop.leveldb_readoptions_create();
 }