From 660438012cb6e9d2e04be26c30e933774070e960 Mon Sep 17 00:00:00 2001 From: Burak Sezer Date: Wed, 9 Dec 2020 19:16:44 +0300 Subject: [PATCH] feat: add getentry command to olric-cli --- cmd/olric-cli/cli/cli.go | 1 + cmd/olric-cli/cli/evaluate.go | 40 ++++++++++++++++++++++-------- cmd/olric-cli/cli/evaluate_test.go | 11 ++++++++ cmd/olric-cli/cli/help.go | 29 ++++++++++++++-------- 4 files changed, 59 insertions(+), 22 deletions(-) diff --git a/cmd/olric-cli/cli/cli.go b/cmd/olric-cli/cli/cli.go index cece2e99..5202464e 100644 --- a/cmd/olric-cli/cli/cli.go +++ b/cmd/olric-cli/cli/cli.go @@ -49,6 +49,7 @@ var completer = readline.NewPrefixCompleter( readline.PcItem("incr"), readline.PcItem("decr"), readline.PcItem("expire"), + readline.PcItem("getentry"), ) // CLI defines the command line client for Olric. diff --git a/cmd/olric-cli/cli/evaluate.go b/cmd/olric-cli/cli/evaluate.go index b8704df4..06984b2b 100644 --- a/cmd/olric-cli/cli/evaluate.go +++ b/cmd/olric-cli/cli/evaluate.go @@ -15,6 +15,7 @@ package cli import ( + "encoding/json" "fmt" "strconv" "strings" @@ -25,19 +26,34 @@ import ( ) const ( - cmdPut string = "put" - cmdPutEx string = "putex" - cmdGet string = "get" - cmdDelete string = "delete" - cmdDestroy string = "destroy" - cmdExpire string = "expire" - cmdPutIf string = "putif" - cmdPutIfEx string = "putifex" - cmdIncr string = "incr" - cmdDecr string = "decr" - cmdGetPut string = "getput" + cmdPut string = "put" + cmdPutEx string = "putex" + cmdGet string = "get" + cmdDelete string = "delete" + cmdDestroy string = "destroy" + cmdExpire string = "expire" + cmdPutIf string = "putif" + cmdPutIfEx string = "putifex" + cmdIncr string = "incr" + cmdDecr string = "decr" + cmdGetPut string = "getput" + cmdGetEntry string = "getentry" ) +func (c *CLI) evalGetEntry(dm *client.DMap, fields []string) error { + key := strings.Join(fields, " ") + entry, err := dm.GetEntry(key) + if err != nil { + return err + } + text, err := json.MarshalIndent(entry, "", "\t") + if err != nil { + return err + } + c.print(fmt.Sprintf("%s\n", text)) + return nil +} + func (c *CLI) evalPut(dm *client.DMap, fields []string) error { if len(fields) < 1 { return errInvalidCommand @@ -227,6 +243,8 @@ func (c *CLI) evaluate(dmap, line string) error { return c.evalPutIf(dm, fields) case cmd == cmdPutIfEx: return c.evalPutIfEx(dm, fields) + case cmd == cmdGetEntry: + return c.evalGetEntry(dm, fields) default: return fmt.Errorf("invalid command") } diff --git a/cmd/olric-cli/cli/evaluate_test.go b/cmd/olric-cli/cli/evaluate_test.go index 574c04f0..6d3798fe 100644 --- a/cmd/olric-cli/cli/evaluate_test.go +++ b/cmd/olric-cli/cli/evaluate_test.go @@ -332,4 +332,15 @@ func TestEvaluate(t *testing.T) { t.Fatalf("Expected olric.ErrKeyNotFound, Got: %v", err) } }) + + t.Run("run evalGetEntry", func(t *testing.T) { + _ = dm.Put("evalGetEntry-test", "evalGetEntry-test") + fields := []string{ + "evalGetEntry-test", + } + err := c.evalGetEntry(dm, fields) + if err != nil { + t.Fatalf("Expected nil, Got: %v", err) + } + }) } diff --git a/cmd/olric-cli/cli/help.go b/cmd/olric-cli/cli/help.go index bcff3258..14672974 100644 --- a/cmd/olric-cli/cli/help.go +++ b/cmd/olric-cli/cli/help.go @@ -98,19 +98,26 @@ func (c *CLI) helpGetPut() { c.print("GetPut atomically sets key to value and returns the old value stored at key.\n") } +func (c *CLI) helpGetEntry() { + c.print("# GetEntry #\n\n") + c.print(">> getentry \n\n") + c.print("GetEntry gets the value for the given key. It returns ErrKeyNotFound if the DB does not contains the key. It's thread-safe.\n") +} + func (c *CLI) help(cmd string) error { var commands = map[string]func(){ - "put": c.helpPut, - "putif": c.helpPutIf, - "putex": c.helpPutEx, - "putIfEx": c.helpPutIfEx, - "get": c.helpGet, - "expire": c.helpExpire, - "delete": c.helpDelete, - "destroy": c.helpDestroy, - "incr": c.helpIncr, - "decr": c.helpDecr, - "getput": c.helpGetPut, + "put": c.helpPut, + "putif": c.helpPutIf, + "putex": c.helpPutEx, + "putIfEx": c.helpPutIfEx, + "get": c.helpGet, + "expire": c.helpExpire, + "delete": c.helpDelete, + "destroy": c.helpDestroy, + "incr": c.helpIncr, + "decr": c.helpDecr, + "getput": c.helpGetPut, + "getentry": c.helpGetEntry, } if cmd != "" {