boltdb support.
This commit is contained in:
93
bolt/lib.go
Normal file
93
bolt/lib.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package bolt
|
||||
|
||||
import (
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/boltdb/bolt"
|
||||
"github.com/fiatjaf/eventstore"
|
||||
)
|
||||
|
||||
const (
|
||||
maxuint16 = 65535
|
||||
maxuint32 = 4294967295
|
||||
)
|
||||
|
||||
var (
|
||||
bucketSettings = []byte{99}
|
||||
bucketRaw = []byte{1}
|
||||
bucketCreatedAt = []byte{2}
|
||||
bucketId = []byte{3}
|
||||
bucketKind = []byte{4}
|
||||
bucketPubkey = []byte{5}
|
||||
bucketPubkeyKind = []byte{6}
|
||||
bucketTag = []byte{7}
|
||||
bucketTag32 = []byte{8}
|
||||
bucketTagAddr = []byte{9}
|
||||
)
|
||||
|
||||
var _ eventstore.Store = (*BoltBackend)(nil)
|
||||
|
||||
type BoltBackend struct {
|
||||
Path string
|
||||
MaxLimit int
|
||||
|
||||
db *bolt.DB
|
||||
|
||||
lastId atomic.Uint32
|
||||
}
|
||||
|
||||
func (b *BoltBackend) Init() error {
|
||||
if b.MaxLimit == 0 {
|
||||
b.MaxLimit = 500
|
||||
}
|
||||
|
||||
// open boltdb
|
||||
db, err := bolt.Open(b.Path, 0644, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b.db = db
|
||||
|
||||
// open each bucket
|
||||
if err := b.db.Update(func(txn *bolt.Tx) error {
|
||||
if _, err := txn.CreateBucket(bucketSettings); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketRaw); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketCreatedAt); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketId); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketKind); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketPubkey); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketPubkeyKind); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketTag); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketTag32); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
if _, err := txn.CreateBucket(bucketTagAddr); err != nil && err != bolt.ErrBucketExists {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return b.runMigrations()
|
||||
}
|
||||
|
||||
func (b *BoltBackend) Close() {
|
||||
b.db.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user