Skip to content

Commit

Permalink
Merge pull request ByteStorage#233 from wangchenguang123/cli-list
Browse files Browse the repository at this point in the history
add implement all functions in cli list(ByteStorage#189)
  • Loading branch information
sjcsjc123 authored Jul 22, 2023
2 parents 80c6e3c + 17bdcfd commit 0076122
Show file tree
Hide file tree
Showing 10 changed files with 1,288 additions and 167 deletions.
235 changes: 235 additions & 0 deletions cmd/client/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
package client

import (
"fmt"
"github.com/desertbit/grumble"
)

func stringLPushData(c *grumble.Context) error {
key := c.Args.String("key")
value := c.Args.String("value")
if key == "" || value == "" {
fmt.Println("key or value is empty")
return nil
}

err := newClient().LPush(key, value)
if err != nil {
fmt.Println("LPush data error: ", err)
return err
}
fmt.Println("LPush data success")
return nil
}

// CLI for LPushs command
func stringLPushsData(c *grumble.Context) error {
key := c.Args.String("key")
values := c.Args.StringList("values")
if key == "" || len(values) == 0 {
fmt.Println("key or values is empty")
return nil
}

interfaceValues := make([]interface{}, len(values))
for i, v := range values {
interfaceValues[i] = v
}

err := newClient().LPushs(key, interfaceValues)
if err != nil {
fmt.Println("LPushs data error:", err)
return err
}
fmt.Println("LPushs data success")
return nil
}

// CLI for RPush command
func stringRPushData(c *grumble.Context) error {
key := c.Args.String("key")
value := c.Args.String("value")
if key == "" || value == "" {
fmt.Println("key or value is empty")
return nil
}

err := newClient().RPush(key, value)
if err != nil {
fmt.Println("RPush data error:", err)
return err
}
fmt.Println("RPush data success")
return nil
}

// CLI for RPushs command
func stringRPushsData(c *grumble.Context) error {
key := c.Args.String("key")
values := c.Args.StringList("values")
if key == "" || len(values) == 0 {
fmt.Println("key or values is empty")
return nil
}

interfaceValues := make([]interface{}, len(values))
for i, v := range values {
interfaceValues[i] = v
}
println(interfaceValues)
err := newClient().RPushs(key, interfaceValues)
if err != nil {
fmt.Println("RPushs data error:", err)
return err
}
fmt.Println("RPushs data success")
return nil
}

func stringLPopData(c *grumble.Context) error {
key := c.Args.String("key")
if key == "" {
fmt.Println("key is empty")
return nil
}

value, err := newClient().LPop(key)
if err != nil {
fmt.Println("LPop data error:", err)
return err
}

fmt.Println("LPop data success:", value)
return nil
}

// CLI for RPop command
func stringRPopData(c *grumble.Context) error {
key := c.Args.String("key")
if key == "" {
fmt.Println("key is empty")
return nil
}

value, err := newClient().RPop(key)
if err != nil {
fmt.Println("RPop data error:", err)
return err
}

fmt.Println("RPop data success:", value)
return nil
}

// CLI for LRange command
func stringLRangeData(c *grumble.Context) error {
key := c.Args.String("key")
start := c.Args.Int("start")
stop := c.Args.Int("stop")
if key == "" {
fmt.Println("key is empty")
return nil
}

values, err := newClient().LRange(key, start, stop)
if err != nil {
fmt.Println("LRange data error:", err)
return err
}

fmt.Println("LRange data success:", values)
return nil
}

// CLI for LLen command
func stringLLenData(c *grumble.Context) error {
key := c.Args.String("key")
if key == "" {
fmt.Println("key is empty")
return nil
}

length, err := newClient().LLen(key)
if err != nil {
fmt.Println("LLen data error:", err)
return err
}

fmt.Println("LLen data success:", length)
return nil
}

// CLI for LRem command
func stringLRemData(c *grumble.Context) error {
key := c.Args.String("key")
count := c.Args.Int("count")
value := c.Args.String("value")
if key == "" || value == "" {
fmt.Println("key or value is empty")
return nil
}

err := newClient().LRem(key, int32(count), value)
if err != nil {
fmt.Println("LRem data error:", err)
return err
}
fmt.Println("LRem data success")
return nil
}

// CLI for LIndex command
func stringLIndexData(c *grumble.Context) error {
key := c.Args.String("key")
index := c.Args.Int("index")
if key == "" {
fmt.Println("key is empty")
return nil
}

value, err := newClient().LIndex(key, index)
if err != nil {
fmt.Println("LIndex data error:", err)
return err
}
fmt.Println("LIndex data success:", value)
return nil
}

// CLI for LSet command
func stringLSetData(c *grumble.Context) error {
key := c.Args.String("key")
index := c.Args.Int("index")
value := c.Args.String("value")
if key == "" || value == "" {
fmt.Println("key or value is empty")
return nil
}

err := newClient().LSet(key, index, value)
if err != nil {
fmt.Println("LSet data error:", err)
return err
}
fmt.Println("LSet data success")
return nil
}

// CLI for LTrim command
func stringLTrimData(c *grumble.Context) error {
key := c.Args.String("key")
start := c.Args.Int("start")
stop := c.Args.Int("stop")
if key == "" {
fmt.Println("key is empty")
return nil
}

err := newClient().LTrim(key, start, stop)
if err != nil {
fmt.Println("LTrim data error:", err)
return err
}
fmt.Println("LTrim data success")
return nil
}
122 changes: 122 additions & 0 deletions cmd/client/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,126 @@ func register(app *grumble.App) {
a.String("field", "field", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LPush",
Help: "Inserts a value at the head of a list in list-structure",
Run: stringLPushData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.String("value", "value", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LPushs",
Help: "Inserts multiple values at the head of a list in list-structure",
Run: stringLPushsData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.StringList("values", "values", grumble.Default([]string{}))
},
})

app.AddCommand(&grumble.Command{
Name: "RPush",
Help: "Inserts a value at the tail of a list in list-structure",
Run: stringRPushData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.String("value", "value", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "RPushs",
Help: "Push elements to the end of a list in list-structure",
Run: stringRPushsData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.StringList("values", "values", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LPop",
Help: "Removes and returns the first element of a list in list-structure",
Run: stringLPopData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "RPop",
Help: "Removes and returns the last element of a list in list-structure",
Run: stringRPopData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LRange",
Help: "Returns a range of elements from a list in list-structure",
Run: stringLRangeData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.Int("start", "start", grumble.Default(0))
a.Int("stop", "stop", grumble.Default(-1))
},
})

app.AddCommand(&grumble.Command{
Name: "LLen",
Help: "Returns the length of a list in list-structure",
Run: stringLLenData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LRem",
Help: "Remove elements from a list in list-structure",
Run: stringLRemData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.Int("count", "count", grumble.Default(0))
a.String("value", "value", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LIndex",
Help: "Get the element at a specific index in a list in list-structure",
Run: stringLIndexData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.Int("index", "index", grumble.Default(0))
},
})

app.AddCommand(&grumble.Command{
Name: "LSet",
Help: "Set the value of an element at a specific index in a list in list-structure",
Run: stringLSetData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.Int("index", "index", grumble.Default(0))
a.String("value", "value", grumble.Default(""))
},
})

app.AddCommand(&grumble.Command{
Name: "LTrim",
Help: "Trim a list to a specified range of elements in list-structure",
Run: stringLTrimData,
Args: func(a *grumble.Args) {
a.String("key", "key", grumble.Default(""))
a.Int("start", "start", grumble.Default(0))
a.Int("stop", "stop", grumble.Default(0))
},
})

}
8 changes: 8 additions & 0 deletions engine/grpc/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/ByteStorage/FlyDB/config"
"github.com/ByteStorage/FlyDB/engine/grpc/service"
"github.com/ByteStorage/FlyDB/lib/proto/ghash"
"github.com/ByteStorage/FlyDB/lib/proto/glist"
"github.com/ByteStorage/FlyDB/lib/proto/gstring"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
Expand Down Expand Up @@ -53,6 +54,13 @@ func NewService(options config.Options, addr string) (Base, error) {
baseService.RegisterService(hashService)
ghash.RegisterGHashServiceServer(baseService.server, hashService)

listService, err := service.NewListService(options)
if err != nil {
return nil, err
}
baseService.RegisterService(listService)
glist.RegisterGListServiceServer(baseService.server, listService)

return baseService, nil
}

Expand Down
Loading

0 comments on commit 0076122

Please sign in to comment.