Documentation ¶
Index ¶
- func InternalRegisterDBCreator(backend BackendType, creator dbCreator, force bool)
- func IsKeyInDomain(key, start, end []byte) bool
- type BackendType
- type Batch
- type DB
- type ImmutableDB
- func (idb *ImmutableDB) Close()
- func (idb *ImmutableDB) Delete(key []byte)
- func (idb *ImmutableDB) DeleteSync(key []byte)
- func (idb *ImmutableDB) Get(key []byte) []byte
- func (idb *ImmutableDB) Has(key []byte) bool
- func (idb *ImmutableDB) Iterator(start, end []byte) Iterator
- func (idb *ImmutableDB) NewBatch() Batch
- func (idb *ImmutableDB) Print()
- func (idb *ImmutableDB) ReverseIterator(start, end []byte) Iterator
- func (idb *ImmutableDB) Set(key []byte, value []byte)
- func (idb *ImmutableDB) SetSync(key []byte, value []byte)
- func (idb *ImmutableDB) Stats() map[string]string
- type Iterator
- type PrefixDB
- func (pdb *PrefixDB) Close()
- func (pdb *PrefixDB) Delete(key []byte)
- func (pdb *PrefixDB) DeleteSync(key []byte)
- func (pdb *PrefixDB) Get(key []byte) []byte
- func (pdb *PrefixDB) Has(key []byte) bool
- func (pdb *PrefixDB) Iterator(start, end []byte) Iterator
- func (pdb *PrefixDB) Mutex() *sync.Mutex
- func (pdb *PrefixDB) NewBatch() Batch
- func (pdb *PrefixDB) Print()
- func (pdb *PrefixDB) ReverseIterator(start, end []byte) Iterator
- func (pdb *PrefixDB) Set(key []byte, value []byte)
- func (pdb *PrefixDB) SetSync(key []byte, value []byte)
- func (pdb *PrefixDB) Stats() map[string]string
- type SetDeleter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func InternalRegisterDBCreator ¶
func InternalRegisterDBCreator(backend BackendType, creator dbCreator, force bool)
InternalRegisterDBCreator is used by the init functions of imported databases to register their own dbCreators.
This function is not meant for usage outside of db/.
func IsKeyInDomain ¶
See DB interface documentation for more information.
Types ¶
type BackendType ¶
type BackendType string
const ( // GoLevelDBBackend represents goleveldb (github.com/syndtr/goleveldb - most // popular implementation) // - stable GoLevelDBBackend BackendType = "goleveldb" // MemDBBackend represents in-memory key value store, which is mostly used // for testing. MemDBBackend BackendType = "memdb" // BoltDBBackend represents bolt (uses etcd's fork of bolt - // go.etcd.io/bbolt) // - EXPERIMENTAL // - may be faster is some use-cases (random reads - indexer) BoltDBBackend BackendType = "boltdb" )
These are valid backend types.
The backends themselves must be imported to be used (ie. using the blank import, `import _ "github.com/gnolang/gno/tm2/pkg/db/goleveldb"`). To allow for end-user customization at build time, the package "github.com/gnolang/gno/tm2/pkg/db/_tags" can be imported -- this package will import each database depending on whether its build tag is provided.
This can be used in conjunction with specific to provide defaults, for instance:
package main import ( "github.com/gnolang/gno/tm2/pkg/db" _ "github.com/gnolang/gno/tm2/pkg/db/_tags" // allow user to customize with build tags _ "github.com/gnolang/gno/tm2/pkg/db/memdb" // always support memdb ) func main() { db.NewDB("mydb", db.BackendType(userProvidedBackend), "./data") }
func BackendList ¶
func BackendList() []BackendType
BackendList returns a list of available db backends. The list is sorted.
func (BackendType) String ¶
func (b BackendType) String() string
type Batch ¶
type Batch interface { SetDeleter Write() WriteSync() Close() }
Batch Close must be called when the program no longer needs the object.
type DB ¶
type DB interface { // Get returns nil iff key doesn't exist. // A nil key is interpreted as an empty byteslice. // CONTRACT: key, value readonly []byte Get([]byte) []byte // Has checks if a key exists. // A nil key is interpreted as an empty byteslice. // CONTRACT: key, value readonly []byte Has(key []byte) bool // Set sets the key. // A nil key is interpreted as an empty byteslice. // CONTRACT: key, value readonly []byte Set([]byte, []byte) SetSync([]byte, []byte) // Delete deletes the key. // A nil key is interpreted as an empty byteslice. // CONTRACT: key readonly []byte Delete([]byte) DeleteSync([]byte) // Iterate over a domain of keys in ascending order. End is exclusive. // Start must be less than end, or the Iterator is invalid. // A nil start is interpreted as an empty byteslice. // If end is nil, iterates up to the last item (inclusive). // CONTRACT: No writes may happen within a domain while an iterator exists over it. // CONTRACT: start, end readonly []byte Iterator(start, end []byte) Iterator // Iterate over a domain of keys in descending order. End is exclusive. // Start must be less than end, or the Iterator is invalid. // If start is nil, iterates up to the first/least item (inclusive). // If end is nil, iterates from the last/greatest item (inclusive). // CONTRACT: No writes may happen within a domain while an iterator exists over it. // CONTRACT: start, end readonly []byte ReverseIterator(start, end []byte) Iterator // Closes the connection. Close() // Creates a batch for atomic updates. NewBatch() Batch // For debugging Print() // Stats returns a map of property values for all keys and the size of the cache. Stats() map[string]string }
DBs are goroutine safe.
type ImmutableDB ¶
type ImmutableDB struct {
// contains filtered or unexported fields
}
func NewImmutableDB ¶
func NewImmutableDB(db DB) *ImmutableDB
NewImmutableDB wraps a db to make it immutable. ImmutableDB panics on mutation operations.
func (*ImmutableDB) Iterator ¶
func (idb *ImmutableDB) Iterator(start, end []byte) Iterator
Implements DB.
func (*ImmutableDB) ReverseIterator ¶
func (idb *ImmutableDB) ReverseIterator(start, end []byte) Iterator
Implements DB.
func (*ImmutableDB) SetSync ¶
func (idb *ImmutableDB) SetSync(key []byte, value []byte)
Implements DB.
type Iterator ¶
type Iterator interface { // The start & end (exclusive) limits to iterate over. // If end < start, then the Iterator goes in reverse order. // // A domain of ([]byte{12, 13}, []byte{12, 14}) will iterate // over anything with the prefix []byte{12, 13}. // // The smallest key is the empty byte array []byte{} - see BeginningKey(). // The largest key is the nil byte array []byte(nil) - see EndingKey(). // CONTRACT: start, end readonly []byte Domain() (start []byte, end []byte) // Valid returns whether the current position is valid. // Once invalid, an Iterator is forever invalid. Valid() bool // Next moves the iterator to the next sequential key in the database, as // defined by order of iteration. // // If Valid returns false, this method will panic. Next() // Key returns the key of the cursor. // If Valid returns false, this method will panic. // CONTRACT: key readonly []byte Key() (key []byte) // Value returns the value of the cursor. // If Valid returns false, this method will panic. // CONTRACT: value readonly []byte Value() (value []byte) // Close releases the Iterator. Close() }
Usage:
var itr Iterator = ... defer itr.Close()
for ; itr.Valid(); itr.Next() { k, v := itr.Key(); itr.Value() // ... }
func IteratePrefix ¶
IteratePrefix is a convenience function for iterating over a key domain restricted by prefix.
type PrefixDB ¶
type PrefixDB struct {
// contains filtered or unexported fields
}
func NewPrefixDB ¶
NewPrefixDB lets you namespace multiple DBs within a single DB.
func (*PrefixDB) ReverseIterator ¶
Implements DB.