mirror of https://github.com/etcd-io/bbolt.git
Add 'bolt set'.
parent
0e4d77d424
commit
64a52452d3
|
@ -23,17 +23,22 @@ func NewApp() *cli.App {
|
|||
app.Commands = []cli.Command{
|
||||
{
|
||||
Name: "get",
|
||||
Usage: "retrieve a value for given key",
|
||||
Usage: "Retrieve a value for given key in a bucket",
|
||||
Action: GetCommand,
|
||||
},
|
||||
{
|
||||
Name: "set",
|
||||
Usage: "Sets a value for given key in a bucket",
|
||||
Action: SetCommand,
|
||||
},
|
||||
{
|
||||
Name: "keys",
|
||||
Usage: "retrieve a list of all keys in a bucket",
|
||||
Usage: "Retrieve a list of all keys in a bucket",
|
||||
Action: KeysCommand,
|
||||
},
|
||||
{
|
||||
Name: "pages",
|
||||
Usage: "dump page information for a database",
|
||||
Usage: "Dumps page information for a database",
|
||||
Action: PagesCommand,
|
||||
},
|
||||
}
|
||||
|
@ -79,6 +84,38 @@ func GetCommand(c *cli.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
// SetCommand sets the value for a given key in a bucket.
|
||||
func SetCommand(c *cli.Context) {
|
||||
path, name, key, value := c.Args().Get(0), c.Args().Get(1), c.Args().Get(2), c.Args().Get(3)
|
||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||
fatal(err)
|
||||
return
|
||||
}
|
||||
|
||||
db, err := bolt.Open(path, 0600)
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
return
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
err = db.Do(func(tx *bolt.Tx) error {
|
||||
// Find bucket.
|
||||
b := tx.Bucket(name)
|
||||
if b == nil {
|
||||
fatalf("bucket not found: %s", name)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Set value for a given key.
|
||||
return b.Put([]byte(key), []byte(value))
|
||||
})
|
||||
if err != nil {
|
||||
fatal(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// KeysCommand retrieves a list of keys for a given bucket.
|
||||
func KeysCommand(c *cli.Context) {
|
||||
path, name := c.Args().Get(0), c.Args().Get(1)
|
||||
|
|
|
@ -53,6 +53,35 @@ func TestGetKeyNotFound(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// Ensure that a value can be set from the CLI.
|
||||
func TestSet(t *testing.T) {
|
||||
SetTestMode(true)
|
||||
open(func(db *bolt.DB) {
|
||||
db.Do(func(tx *bolt.Tx) error {
|
||||
tx.CreateBucket("widgets")
|
||||
return nil
|
||||
})
|
||||
assert.Equal(t, "", run("set", db.Path(), "widgets", "foo", "bar"))
|
||||
assert.Equal(t, "bar", run("get", db.Path(), "widgets", "foo"))
|
||||
})
|
||||
}
|
||||
|
||||
// Ensure that an error is reported if the database is not found.
|
||||
func TestSetDBNotFound(t *testing.T) {
|
||||
SetTestMode(true)
|
||||
output := run("set", "no/such/db", "widgets", "foo", "bar")
|
||||
assert.Equal(t, "stat no/such/db: no such file or directory", output)
|
||||
}
|
||||
|
||||
// Ensure that an error is reported if the bucket is not found.
|
||||
func TestSetBucketNotFound(t *testing.T) {
|
||||
SetTestMode(true)
|
||||
open(func(db *bolt.DB) {
|
||||
output := run("set", db.Path(), "widgets", "foo", "bar")
|
||||
assert.Equal(t, "bucket not found: widgets", output)
|
||||
})
|
||||
}
|
||||
|
||||
// Ensure that a list of keys can be retrieved for a given bucket.
|
||||
func TestKeys(t *testing.T) {
|
||||
SetTestMode(true)
|
||||
|
|
Loading…
Reference in New Issue