63 lines
1.1 KiB
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, "_")
|
|
}
|