public string rocksdb_get( /*rocksdb_t**/ IntPtr db, /*const rocksdb_readoptions_t**/ IntPtr read_options, string key, out IntPtr errptr, ColumnFamilyHandle cf = null, Encoding encoding = null) { if (encoding == null) { encoding = Encoding.UTF8; } long bvlength; unsafe { fixed(char *k = key) { int klength = key.Length; int bklength = encoding.GetByteCount(k, klength); var buffer = Marshal.AllocHGlobal(bklength); byte *bk = (byte *)buffer.ToPointer(); encoding.GetBytes(k, klength, bk, bklength); var resultPtr = cf == null ? rocksdb_get(db, read_options, bk, bklength, out bvlength, out errptr) : rocksdb_get_cf(db, read_options, cf.Handle, bk, bklength, out bvlength, out errptr); #if DEBUG Zero(bk, bklength); #endif Marshal.FreeHGlobal(buffer); if (errptr != IntPtr.Zero) { return(null); } if (resultPtr == IntPtr.Zero) { return(null); } byte *bv = (byte *)resultPtr.ToPointer(); int vlength = encoding.GetCharCount(bv, (int)bvlength); fixed(char *v = new char[vlength]) { encoding.GetChars(bv, (int)bvlength, v, vlength); rocksdb_free(resultPtr); return(new string(v, 0, vlength)); } } } }
public unsafe void Delete(byte *key, ulong klen, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_writebatch_delete(handle, key, klen); } else { Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, key, klen); } }
/// <inheritdoc/> public override long GetTxNonce(Guid chainId, Address address) { ColumnFamilyHandle cf = GetColumnFamily(_chainDb, chainId); byte[] key = TxNonceKey(address); byte[] bytes = _chainDb.Get(key, cf); return(bytes is null ? 0 : RocksDBStoreBitConverter.ToInt64(bytes)); }
public unsafe void Merge(byte *key, ulong klen, byte *val, ulong vlen, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_writebatch_merge(handle, key, klen, val, vlen); } else { Native.Instance.rocksdb_writebatch_merge_cf(handle, cf.Handle, key, klen, val, vlen); } }
public void CompactRange(byte[] start, byte[] limit, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_compact_range(Handle, start, (UIntPtr)(start?.GetLongLength(0) ?? 0L), limit, (UIntPtr)(limit?.GetLongLength(0) ?? 0L)); } else { Native.Instance.rocksdb_compact_range_cf(Handle, cf.Handle, start, (UIntPtr)(start?.GetLongLength(0) ?? 0L), limit, (UIntPtr)(limit?.GetLongLength(0) ?? 0L)); } }
public void Remove(byte[] key, long keyLength, ColumnFamilyHandle cf = null, WriteOptions writeOptions = null) { if (cf == null) { Native.Instance.rocksdb_delete(Handle, (writeOptions ?? DefaultWriteOptions).Handle, key, (UIntPtr)keyLength); } else { Native.Instance.rocksdb_delete_cf(Handle, (writeOptions ?? DefaultWriteOptions).Handle, cf.Handle, key, (UIntPtr)keyLength); } }
public IDbStore GetDbStore(string partitionName) { Preconditions.CheckNonWhiteSpace(partitionName, nameof(partitionName)); if (!this.entityDbStoreDictionary.TryGetValue(partitionName, out IDbStore entityDbStore)) { ColumnFamilyHandle handle = this.db.CreateColumnFamily(this.optionsProvider.GetColumnFamilyOptions(), partitionName); entityDbStore = new ColumnFamilyDbStore(this.db, handle); entityDbStore = this.entityDbStoreDictionary.GetOrAdd(partitionName, entityDbStore); } return(entityDbStore); }
public unsafe void Put(byte *key, ulong klen, byte *val, ulong vlen, ColumnFamilyHandle cf = null) { if (cf is null) { Native.Instance.rocksdb_writebatch_wi_put(handle, key, (UIntPtr)klen, val, (UIntPtr)vlen); } else { Native.Instance.rocksdb_writebatch_wi_put_cf(handle, cf.Handle, key, (UIntPtr)klen, val, (UIntPtr)vlen); } }
public WriteBatchWithIndex Delete(byte[] key, ulong klen, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_writebatch_wi_delete(handle, key, klen); } else { Native.Instance.rocksdb_writebatch_wi_delete_cf(handle, cf.Handle, key, klen); } return(this); }
public void rocksdb_delete( /*rocksdb_t**/ IntPtr db, /*const rocksdb_writeoptions_t**/ IntPtr writeOptions, /*const*/ string key, ColumnFamilyHandle cf) { rocksdb_delete(db, writeOptions, key, out IntPtr errptr, cf); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } }
public WriteBatch Merge(byte[] key, ulong klen, byte[] val, ulong vlen, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_writebatch_merge(handle, key, (UIntPtr)klen, val, (UIntPtr)vlen); } else { Native.Instance.rocksdb_writebatch_merge_cf(handle, cf.Handle, key, (UIntPtr)klen, val, (UIntPtr)vlen); } return(this); }
public WriteBatch Put(byte[] key, ulong klen, byte[] val, ulong vlen, ColumnFamilyHandle cf = null) { if (cf == null) { Native.Instance.rocksdb_writebatch_put(handle, key, klen, val, vlen); } else { Native.Instance.rocksdb_writebatch_put_cf(handle, cf.Handle, key, klen, val, vlen); } return(this); }
public void rocksdb_delete_cf( /*rocksdb_t**/ IntPtr db, /*const rocksdb_writeoptions_t**/ IntPtr writeOptions, /*const*/ byte[] key, long keylen, ColumnFamilyHandle cf) { rocksdb_delete_cf(db, writeOptions, cf.Handle, key, (UIntPtr)keylen, out IntPtr errptr); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } }
public WriteBatch Delete(byte[] key, ulong klen, ColumnFamilyHandle cf = null) { if (cf is null) { Native.Instance.rocksdb_writebatch_delete(handle, key, (UIntPtr)klen); } else { Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, key, (UIntPtr)klen); } return(this); }
/// <inheritdoc/> public override void ForkBlockIndexes( Guid sourceChainId, Guid destinationChainId, HashDigest <SHA256> branchPoint) { HashDigest <SHA256>?genesisHash = IterateIndexes(sourceChainId, 0, 1) .Cast <HashDigest <SHA256>?>() .FirstOrDefault(); if (genesisHash is null || branchPoint.Equals(genesisHash)) { return; } ColumnFamilyHandle cf = GetColumnFamily(_chainDb, destinationChainId); var writeBatch = new WriteBatch(); long index = 0; try { foreach (Iterator it in IterateDb(_chainDb, IndexKeyPrefix, sourceChainId)) { byte[] hashBytes = it.Value(); writeBatch.Put(it.Key(), hashBytes, cf); index += 1; if (writeBatch.Count() >= ForkWriteBatchSize) { _chainDb.Write(writeBatch); writeBatch.Dispose(); writeBatch = new WriteBatch(); } if (branchPoint.ToByteArray().SequenceEqual(hashBytes)) { break; } } } finally { _chainDb.Write(writeBatch); writeBatch.Dispose(); } _chainDb.Put( IndexCountKey, RocksDBStoreBitConverter.GetBytes(index), cf ); }
public void rocksdb_delete( /*rocksdb_t**/ IntPtr db, /*const rocksdb_writeoptions_t**/ IntPtr writeOptions, /*const*/ string key, out IntPtr errptr, ColumnFamilyHandle cf, Encoding encoding = null) { var bkey = (encoding ?? Encoding.UTF8).GetBytes(key); if (cf == null) rocksdb_delete(db, writeOptions, bkey, bkey.GetLongLength(0), out errptr); else rocksdb_delete_cf(db, writeOptions, cf.Handle, bkey, bkey.GetLongLength(0), out errptr); }
public void rocksdb_put( /*rocksdb_t**/ IntPtr db, /*const rocksdb_writeoptions_t**/ IntPtr writeOptions, string key, string val, ColumnFamilyHandle cf = null, Encoding encoding = null) { rocksdb_put(db, writeOptions, key, val, out IntPtr errptr, cf, encoding); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } }
public ColumnFamilyDbStore(IRocksDb db, ColumnFamilyHandle handle) { this.db = Preconditions.CheckNotNull(db, nameof(db)); this.Handle = Preconditions.CheckNotNull(handle, nameof(handle)); var iterator = db.NewIterator(this.Handle); this.count = 0; while (iterator.Valid()) { this.count += 1; iterator = iterator.Next(); } }
public unsafe void Remove(ReadOnlySpan <byte> key, ColumnFamilyHandle cf = null, WriteOptions writeOptions = null) { fixed(byte *keyPtr = &MemoryMarshal.GetReference(key)) { if (cf is null) { Native.Instance.rocksdb_delete(Handle, (writeOptions ?? DefaultWriteOptions).Handle, keyPtr, (UIntPtr)key.Length); } else { Native.Instance.rocksdb_delete_cf(Handle, (writeOptions ?? DefaultWriteOptions).Handle, cf.Handle, keyPtr, (UIntPtr)key.Length); } } }
public void rocksdb_transaction_put( /* rocksdb_transaction_t* */ IntPtr txn, /*const rocksdb_writeoptions_t**/ IntPtr writeOptions, string key, string val, ColumnFamilyHandle cf = null, Encoding encoding = null) { IntPtr errptr = IntPtr.Zero; unsafe { if (encoding == null) encoding = Encoding.UTF8; fixed(char *k = key, v = val) { int klength = key.Length; int vlength = val.Length; int bklength = encoding.GetByteCount(k, klength); int bvlength = encoding.GetByteCount(v, vlength); var buffer = Marshal.AllocHGlobal(bklength + bvlength); byte *bk = (byte *)buffer.ToPointer(); encoding.GetBytes(k, klength, bk, bklength); byte *bv = bk + bklength; encoding.GetBytes(v, vlength, bv, bvlength); UIntPtr sklength = (UIntPtr)bklength; UIntPtr svlength = (UIntPtr)bvlength; if (cf == null) { rocksdb_transaction_put(txn, bk, sklength, bv, svlength, out errptr); } else { rocksdb_transaction_put_cf(txn, cf.Handle, bk, sklength, bv, svlength, out errptr); } #if DEBUG Zero(bk, bklength); #endif Marshal.FreeHGlobal(buffer); } } if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } }
public byte[] rocksdb_writebatch_wi_get_from_batch( IntPtr wb, IntPtr options, byte[] key, ulong keyLength = 0, ColumnFamilyHandle cf = null) { var result = rocksdb_writebatch_wi_get_from_batch(wb, options, key, keyLength == 0 ? (ulong)key.Length : keyLength, out IntPtr errptr, cf); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
public string rocksdb_writebatch_wi_get_from_batch( IntPtr wb, IntPtr options, string key, ColumnFamilyHandle cf, Encoding encoding = null) { var result = rocksdb_writebatch_wi_get_from_batch(wb, options, key, out IntPtr errptr, cf, encoding); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
public byte[] rocksdb_get( IntPtr db, IntPtr read_options, byte[] key, long keyLength = 0, ColumnFamilyHandle cf = null) { var result = rocksdb_get(db, read_options, key, keyLength == 0 ? key.Length : keyLength, out IntPtr errptr, cf); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
public string rocksdb_get( /*rocksdb_t**/ IntPtr db, /*const rocksdb_readoptions_t**/ IntPtr read_options, string key, ColumnFamilyHandle cf, Encoding encoding = null) { var result = rocksdb_get(db, read_options, key, out IntPtr errptr, cf, encoding); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
public string rocksdb_transaction_get( /* rocksdb_transaction_t* */ IntPtr txn, /*const rocksdb_readoptions_t**/ IntPtr read_options, string key, ColumnFamilyHandle cf, System.Text.Encoding encoding = null) { var result = raw_rocksdb_transaction_get(txn, read_options, key, out IntPtr errptr, cf, encoding); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
JObject GetCachedJson(ReadOnlySpan <byte> key, ColumnFamilyHandle family, Func <JObject> factory) { var value = db.Get(key, family); if (value != null) { return(JObject.Parse(value)); } else { var json = factory(); db.Put(key, json.ToByteArray(false), family); return(json); } }
public byte[] rocksdb_get( IntPtr db, IntPtr read_options, ReadOnlySpan <byte> key, ColumnFamilyHandle cf = null) { var result = rocksdb_get(db, read_options, key, out IntPtr errptr, cf); if (errptr != IntPtr.Zero) { throw new RocksDbException(errptr); } return(result); }
public void rocksdb_transaction_delete( /* rocksdb_transaction_t* */ IntPtr txn, /*const*/ byte[] key, ColumnFamilyHandle cf) { UIntPtr kLength = (UIntPtr)key.GetLongLength(0); if (cf == null) { rocksdb_transaction_delete(txn, key, kLength); } else { rocksdb_transaction_delete_cf(txn, cf.Handle, key, kLength); } }
public unsafe WriteBatch Delete(ReadOnlySpan <byte> key, ColumnFamilyHandle cf = null) { fixed(byte *keyPtr = &MemoryMarshal.GetReference(key)) { if (cf is null) { Native.Instance.rocksdb_writebatch_delete(handle, keyPtr, (UIntPtr)key.Length); } else { Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, keyPtr, (UIntPtr)key.Length); } } return(this); }
public bool TryGetColumnFamily(string name, out ColumnFamilyHandle handle) { if (columnFamilies is null) { throw new RocksDbSharpException("Database not opened for column families"); } if (columnFamilies.TryGetValue(name, out var internalHandle)) { handle = internalHandle; return(true); } handle = null; return(false); }