bdb/main.go

91 lines
1.6 KiB
Go
Raw Normal View History

2016-07-27 22:27:25 -07:00
package main
import (
"bufio"
"fmt"
"log"
"os"
"github.com/boltdb/bolt"
)
2016-08-22 17:58:06 -07:00
const usage = "bdb <(w)rite|(r)ead|(b)uckets> <db>"
2016-08-20 21:43:37 -07:00
const queued = "queued"
2016-07-27 22:27:25 -07:00
func main() {
log.SetFlags(log.Lshortfile)
if len(os.Args) != 3 {
fmt.Fprintf(os.Stderr, "%s\n", usage)
os.Exit(1)
}
switch os.Args[1] {
2016-08-22 17:58:06 -07:00
case "write", "read", "w", "r", "buckets", "bkts", "b":
2016-07-27 22:27:25 -07:00
default:
fmt.Fprintf(os.Stderr, "%s\n", usage)
os.Exit(1)
}
db, err := bolt.Open(os.Args[2], 0600, nil)
if err != nil {
panic(err)
}
defer db.Close()
switch os.Args[1] {
case "write", "w":
2016-08-20 21:43:37 -07:00
err = db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte(queued))
if err != nil {
return err
}
return nil
})
if err != nil {
panic(err)
}
2016-07-27 22:27:25 -07:00
err := db.Update(func(tx *bolt.Tx) error {
s := bufio.NewScanner(os.Stdin)
2016-08-20 21:43:37 -07:00
b := tx.Bucket([]byte(queued))
2016-07-27 22:27:25 -07:00
for s.Scan() {
err := b.Put(s.Bytes(), s.Bytes())
if err != nil {
return err
}
}
return s.Err()
})
if err != nil {
panic(err)
}
case "read", "r":
2016-08-20 21:43:37 -07:00
err = db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte(queued))
if err != nil {
return err
}
return nil
})
if err != nil {
panic(err)
}
2016-07-27 22:27:25 -07:00
db.View(func(tx *bolt.Tx) error {
2016-08-20 21:43:37 -07:00
b := tx.Bucket([]byte(queued))
2016-07-27 22:27:25 -07:00
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
fmt.Printf("key=%s, value=%s\n", k, v)
}
return nil
})
2016-08-22 17:58:06 -07:00
case "buckets", "bkts", "b":
db.View(func(tx *bolt.Tx) error {
return tx.ForEach(func(name []byte, _ *bolt.Bucket) error {
fmt.Printf("%s\n", name)
return nil
})
})
2016-07-27 22:27:25 -07:00
}
}