add custom bucket support

This commit is contained in:
Thomas von Dein
2024-12-21 22:49:22 +01:00
committed by T.v.Dein
parent be79886e89
commit 3de65aa1c3
3 changed files with 13 additions and 9 deletions

View File

@@ -34,6 +34,7 @@ const MaxValueWidth int = 60
type DB struct {
Debug bool
Dbfile string
Bucket string
DB *bolt.DB
}
@@ -75,8 +76,8 @@ type DbTag struct {
const BucketData string = "data"
func New(file string, debug bool) (*DB, error) {
return &DB{Debug: debug, Dbfile: file}, nil
func New(file string, bucket string, debug bool) (*DB, error) {
return &DB{Debug: debug, Dbfile: file, Bucket: bucket}, nil
}
func (db *DB) Open() error {
@@ -114,7 +115,7 @@ func (db *DB) List(attr *DbAttr) (DbEntries, error) {
err := db.DB.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(BucketData))
bucket := tx.Bucket([]byte(db.Bucket))
if bucket == nil {
return nil
}
@@ -182,7 +183,7 @@ func (db *DB) Set(attr *DbAttr) error {
// any tags. if so, we initialize our update struct with these
// tags unless it has new tags configured.
err := db.DB.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(BucketData))
bucket := tx.Bucket([]byte(db.Bucket))
if bucket == nil {
return nil
}
@@ -211,7 +212,7 @@ func (db *DB) Set(attr *DbAttr) error {
err = db.DB.Update(func(tx *bolt.Tx) error {
// insert data
bucket, err := tx.CreateBucketIfNotExists([]byte(BucketData))
bucket, err := tx.CreateBucketIfNotExists([]byte(db.Bucket))
if err != nil {
return fmt.Errorf("failed to create DB bucket: %w", err)
}
@@ -245,7 +246,7 @@ func (db *DB) Get(attr *DbAttr) (*DbEntry, error) {
entry := DbEntry{}
err := db.DB.View(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(BucketData))
bucket := tx.Bucket([]byte(db.Bucket))
if bucket == nil {
return nil
}
@@ -277,7 +278,7 @@ func (db *DB) Del(attr *DbAttr) error {
defer db.Close()
err := db.DB.Update(func(tx *bolt.Tx) error {
bucket := tx.Bucket([]byte(BucketData))
bucket := tx.Bucket([]byte(db.Bucket))
if bucket == nil {
return nil
@@ -324,7 +325,7 @@ func (db *DB) Import(attr *DbAttr) (string, error) {
err := db.DB.Update(func(tx *bolt.Tx) error {
// insert data
bucket, err := tx.CreateBucketIfNotExists([]byte(BucketData))
bucket, err := tx.CreateBucketIfNotExists([]byte(db.Bucket))
if err != nil {
return fmt.Errorf("failed to create bucket: %w", err)
}

View File

@@ -7,6 +7,7 @@ var Version string = "v0.0.4"
type Config struct {
Debug bool
Dbfile string
Dbbucket string
Template string
Mode string // wide, table, yaml, json
NoHeaders bool

View File

@@ -54,7 +54,7 @@ func Execute() {
Short: "anydb",
Long: `A personal key value store`,
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
db, err := app.New(conf.Dbfile, conf.Debug)
db, err := app.New(conf.Dbfile, conf.Dbbucket, conf.Debug)
if err != nil {
return err
}
@@ -92,6 +92,8 @@ func Execute() {
rootCmd.PersistentFlags().BoolVarP(&conf.Debug, "debug", "d", false, "Enable debugging")
rootCmd.PersistentFlags().StringVarP(&conf.Dbfile, "dbfile", "f",
filepath.Join(home, ".config", "anydb", "default.db"), "DB file to use")
rootCmd.PersistentFlags().StringVarP(&conf.Dbbucket, "bucket", "b",
app.BucketData, "use other bucket (default: " + app.BucketData +")")
rootCmd.AddCommand(Set(&conf))
rootCmd.AddCommand(List(&conf))