sqkv/sqkv.go

63 lines
1.1 KiB
Go

package sqkv
import (
"database/sql"
"fmt"
"regexp"
_ "modernc.org/sqlite"
)
// DB is an SQKV database
type DB struct {
db *sql.DB
}
// Open opens (or creates) a new SQKV database
func Open(path string) (*DB, error) {
dsn := fmt.Sprintf("file:%s?cache=shared&mode=rwc", path)
db, err := sql.Open("sqlite", dsn)
if err != nil {
return nil, err
}
sqkv := &DB{
db: db,
}
_, err = sqkv.CreateBucketIfNotExist(DefaultBucket)
return sqkv, err
}
// Get returns a value from the default bucket
func (d *DB) Get(key string) (string, error) {
b, err := d.Bucket(DefaultBucket)
if err != nil {
return "", nil
}
return b.Get(key)
}
// Put sets a value in the default bucket
func (d *DB) Put(key, value string) error {
b, err := d.Bucket(DefaultBucket)
if err != nil {
return nil
}
return b.Put(key, value)
}
// Delete removes a value from the default bucket
func (d *DB) Delete(key string) error {
b, err := d.Bucket(DefaultBucket)
if err != nil {
return nil
}
return b.Delete(key)
}
var escapeIdentRe = regexp.MustCompile(`[^A-Za-z]`)
func escapeIdent(in string) string {
return escapeIdentRe.ReplaceAllString(in, "_")
}