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{
|
app.Commands = []cli.Command{
|
||||||
{
|
{
|
||||||
Name: "get",
|
Name: "get",
|
||||||
Usage: "retrieve a value for given key",
|
Usage: "Retrieve a value for given key in a bucket",
|
||||||
Action: GetCommand,
|
Action: GetCommand,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "set",
|
||||||
|
Usage: "Sets a value for given key in a bucket",
|
||||||
|
Action: SetCommand,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Name: "keys",
|
Name: "keys",
|
||||||
Usage: "retrieve a list of all keys in a bucket",
|
Usage: "Retrieve a list of all keys in a bucket",
|
||||||
Action: KeysCommand,
|
Action: KeysCommand,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "pages",
|
Name: "pages",
|
||||||
Usage: "dump page information for a database",
|
Usage: "Dumps page information for a database",
|
||||||
Action: PagesCommand,
|
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.
|
// KeysCommand retrieves a list of keys for a given bucket.
|
||||||
func KeysCommand(c *cli.Context) {
|
func KeysCommand(c *cli.Context) {
|
||||||
path, name := c.Args().Get(0), c.Args().Get(1)
|
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.
|
// Ensure that a list of keys can be retrieved for a given bucket.
|
||||||
func TestKeys(t *testing.T) {
|
func TestKeys(t *testing.T) {
|
||||||
SetTestMode(true)
|
SetTestMode(true)
|
||||||
|
|
Loading…
Reference in New Issue