2022-10-11 21:30:06 +02:00

80 lines
1.4 KiB
Go

package db
import (
"fmt"
"github.com/akrylysov/pogreb"
"path"
)
type pogrebTree struct {
id string
db *pogreb.DB
}
func (p *pogrebTree) Id() string {
return p.id
}
func (p *pogrebTree) UpdateHead(head string) (err error) {
return p.db.Put([]byte(fmt.Sprintf("t/%s/heads", p.id)), []byte(head))
}
func (p *pogrebTree) AddChange(key string, value []byte) (err error) {
return p.db.Put([]byte(fmt.Sprintf("t/%s/%s", p.id, key)), value)
}
type pogrebSpace struct {
id string
db *pogreb.DB
}
func (p *pogrebSpace) Id() string {
return p.id
}
func (p *pogrebSpace) CreateTree(id string) (Tree, error) {
return &pogrebTree{
id: id,
db: p.db,
}, nil
}
func (p *pogrebSpace) GetTree(id string) (Tree, error) {
return p.CreateTree(id)
}
func (p *pogrebSpace) Close() error {
return p.db.Close()
}
type pogrebSpaceCreator struct {
rootPath string
}
func (p *pogrebSpaceCreator) CreateSpace(id string) (Space, error) {
dbPath := path.Join(p.rootPath, id)
db, err := pogreb.Open(dbPath, &pogreb.Options{
BackgroundSyncInterval: 0,
BackgroundCompactionInterval: 20000,
})
if err != nil {
return nil, err
}
return &pogrebSpace{
id: id,
db: db,
}, nil
}
func (p *pogrebSpaceCreator) GetSpace(id string) (Space, error) {
return p.CreateSpace(id)
}
func (p *pogrebSpaceCreator) Close() error {
return nil
}
func NewPogrebSpaceCreator() SpaceCreator {
return &pogrebSpaceCreator{rootPath: "db.test"}
}