bitxhub/pkg/storage/storage.go

67 lines
1.6 KiB
Go
Raw Normal View History

2020-03-29 21:32:01 +08:00
package storage
import "fmt"
var (
ErrorNotFound = fmt.Errorf("not found in DB")
)
2020-03-29 21:32:01 +08:00
type Storage interface {
Write
// Get retrieves the object `value` named by `key`.
// Get will return nil if the key is not mapped to a value.
Get(key []byte) []byte
2020-03-29 21:32:01 +08:00
// Has returns whether the `key` is mapped to a `value`.
Has(key []byte) bool
2020-03-29 21:32:01 +08:00
// Iterator iterates over a DB's key/value pairs in key order.
Iterator(start, end []byte) Iterator
// QueryByPrefix iterates over a DB's key/value pairs in key order including prefix.
Prefix(prefix []byte) Iterator
NewBatch() Batch
Close() error
}
// Write is the write-side of the storage interface.
type Write interface {
// Put stores the object `value` named by `key`.
Put(key, value []byte)
2020-03-29 21:32:01 +08:00
// Delete removes the value for given `key`.
Delete(key []byte)
2020-03-29 21:32:01 +08:00
}
type Iterator interface {
// Next moves the iterator to the next key/value pair.
// It returns false if the iterator is exhausted.
Next() bool
// Prev moves the iterator to the previous key/value pair.
// It returns false if the iterator is exhausted.
Prev() bool
// Seek moves the iterator to the first key/value pair whose key is greater
// than or equal to the given key.
// It returns whether such pair exist.
//
// It is safe to modify the contents of the argument after Seek returns.
Seek(key []byte) bool
// Key returns the key of the current key/value pair, or nil if done.
Key() []byte
// Value returns the value of the current key/value pair, or nil if done.
Value() []byte
}
type Batch interface {
Put(key, value []byte)
Delete(key []byte)
Commit()
2020-03-29 21:32:01 +08:00
}