github.com/eris-ltd/erisdb@v0.25.0/storage/prefix_db.go (about) 1 package storage 2 3 import ( 4 "fmt" 5 6 dbm "github.com/tendermint/tendermint/libs/db" 7 ) 8 9 type PrefixDB struct { 10 prefix Prefix 11 db dbm.DB 12 } 13 14 func NewPrefixDB(db dbm.DB, prefix string) *PrefixDB { 15 return &PrefixDB{ 16 prefix: Prefix(prefix), 17 db: db, 18 } 19 } 20 21 // DB implementation 22 func (pdb *PrefixDB) Get(key []byte) []byte { 23 return pdb.db.Get(pdb.prefix.Key(key)) 24 } 25 26 func (pdb *PrefixDB) Has(key []byte) bool { 27 return pdb.db.Has(pdb.prefix.Key(key)) 28 } 29 30 func (pdb *PrefixDB) Set(key, value []byte) { 31 pdb.db.Set(pdb.prefix.Key(key), value) 32 } 33 34 func (pdb *PrefixDB) SetSync(key, value []byte) { 35 pdb.db.SetSync(pdb.prefix.Key(key), value) 36 } 37 38 func (pdb *PrefixDB) Delete(key []byte) { 39 pdb.db.Delete(pdb.prefix.Key(key)) 40 } 41 42 func (pdb *PrefixDB) DeleteSync(key []byte) { 43 pdb.db.DeleteSync(pdb.prefix.Key(key)) 44 } 45 46 func (pdb *PrefixDB) Iterator(low, high []byte) KVIterator { 47 return pdb.prefix.Iterator(pdb.db.Iterator, low, high) 48 } 49 50 func (pdb *PrefixDB) ReverseIterator(low, high []byte) KVIterator { 51 return pdb.prefix.Iterator(pdb.db.ReverseIterator, low, high) 52 } 53 54 func (pdb *PrefixDB) Close() { 55 pdb.db.Close() 56 } 57 58 func (pdb *PrefixDB) Print() { 59 pdb.db.Print() 60 } 61 62 func (pdb *PrefixDB) Stats() map[string]string { 63 stats := make(map[string]string) 64 stats["PrefixDB.prefix.string"] = string(pdb.prefix) 65 stats["PrefixDB.prefix.hex"] = fmt.Sprintf("%X", pdb.prefix) 66 source := pdb.db.Stats() 67 for key, value := range source { 68 stats["PrefixDB.db."+key] = value 69 } 70 return stats 71 } 72 73 func (pdb *PrefixDB) NewBatch() dbm.Batch { 74 return &prefixBatch{ 75 prefix: pdb.prefix, 76 batch: pdb.db.NewBatch(), 77 } 78 } 79 80 type prefixBatch struct { 81 prefix Prefix 82 batch dbm.Batch 83 } 84 85 func (pb *prefixBatch) Set(key, value []byte) { 86 pb.batch.Set(pb.prefix.Key(key), value) 87 } 88 89 func (pb *prefixBatch) Delete(key []byte) { 90 pb.batch.Delete(pb.prefix.Key(key)) 91 } 92 93 func (pb *prefixBatch) Write() { 94 pb.batch.Write() 95 } 96 97 func (pb *prefixBatch) WriteSync() { 98 pb.batch.WriteSync() 99 } 100 101 func (pb *prefixBatch) Close() { 102 pb.batch.Close() 103 }