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  }