2020-03-29 21:32:01 +08:00
|
|
|
package storage
|
|
|
|
|
2020-04-27 23:12:05 +08:00
|
|
|
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`.
|
2020-04-27 23:12:05 +08:00
|
|
|
// 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`.
|
2020-04-27 23:12:05 +08:00
|
|
|
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`.
|
2020-04-27 23:12:05 +08:00
|
|
|
Put(key, value []byte)
|
2020-03-29 21:32:01 +08:00
|
|
|
|
2020-04-27 23:12:05 +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)
|
2020-04-27 23:12:05 +08:00
|
|
|
Commit()
|
2020-03-29 21:32:01 +08:00
|
|
|
}
|