2014-07-08 13:10:44 +04:00
|
|
|
package server
|
|
|
|
|
2015-03-03 04:21:00 +03:00
|
|
|
// import (
|
|
|
|
// "github.com/siddontang/go/hack"
|
|
|
|
|
|
|
|
// "github.com/siddontang/ledisdb/ledis"
|
|
|
|
// "strings"
|
|
|
|
// )
|
|
|
|
|
|
|
|
// func bgetCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 1 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if v, err := c.db.BGet(args[0]); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeBulk(v)
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bdeleteCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 1 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if n, err := c.db.BDelete(args[0]); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(n)
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bsetbitCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 3 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// var err error
|
|
|
|
// var offset int32
|
|
|
|
// var val int8
|
|
|
|
|
|
|
|
// offset, err = ledis.StrInt32(args[1], nil)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrOffset
|
|
|
|
// }
|
|
|
|
|
|
|
|
// val, err = ledis.StrInt8(args[2], nil)
|
|
|
|
// if val != 0 && val != 1 {
|
|
|
|
// return ErrBool
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrBool
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if ori, err := c.db.BSetBit(args[0], offset, uint8(val)); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(int64(ori))
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bgetbitCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 2 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// offset, err := ledis.StrInt32(args[1], nil)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrOffset
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if v, err := c.db.BGetBit(args[0], offset); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(int64(v))
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bmsetbitCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) < 3 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// key := args[0]
|
|
|
|
// if len(args[1:])&1 != 0 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// } else {
|
|
|
|
// args = args[1:]
|
|
|
|
// }
|
|
|
|
|
|
|
|
// var err error
|
|
|
|
// var offset int32
|
|
|
|
// var val int8
|
|
|
|
|
|
|
|
// pairs := make([]ledis.BitPair, len(args)>>1)
|
|
|
|
// for i := 0; i < len(pairs); i++ {
|
|
|
|
// offset, err = ledis.StrInt32(args[i<<1], nil)
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrOffset
|
|
|
|
// }
|
|
|
|
|
|
|
|
// val, err = ledis.StrInt8(args[i<<1+1], nil)
|
|
|
|
// if val != 0 && val != 1 {
|
|
|
|
// return ErrBool
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrBool
|
|
|
|
// }
|
|
|
|
|
|
|
|
// pairs[i].Pos = offset
|
|
|
|
// pairs[i].Val = uint8(val)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if place, err := c.db.BMSetBit(key, pairs...); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(place)
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bcountCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// argCnt := len(args)
|
|
|
|
|
|
|
|
// if !(argCnt > 0 && argCnt <= 3) {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// // BCount(key []byte, start int32, end int32) (cnt int32, err error) {
|
|
|
|
|
|
|
|
// var err error
|
|
|
|
// var start, end int32 = 0, -1
|
|
|
|
|
|
|
|
// if argCnt > 1 {
|
|
|
|
// start, err = ledis.StrInt32(args[1], nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrValue
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if argCnt > 2 {
|
|
|
|
// end, err = ledis.StrInt32(args[2], nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrValue
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if cnt, err := c.db.BCount(args[0], start, end); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(int64(cnt))
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func boptCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) < 2 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// opDesc := strings.ToLower(hack.String(args[0]))
|
|
|
|
// dstKey := args[1]
|
|
|
|
// srcKeys := args[2:]
|
|
|
|
|
|
|
|
// var op uint8
|
|
|
|
// switch opDesc {
|
|
|
|
// case "and":
|
|
|
|
// op = ledis.OPand
|
|
|
|
// case "or":
|
|
|
|
// op = ledis.OPor
|
|
|
|
// case "xor":
|
|
|
|
// op = ledis.OPxor
|
|
|
|
// case "not":
|
|
|
|
// op = ledis.OPnot
|
|
|
|
// default:
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if len(srcKeys) == 0 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
// if blen, err := c.db.BOperation(op, dstKey, srcKeys...); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(int64(blen))
|
|
|
|
// }
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bexpireCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 2 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// duration, err := ledis.StrInt64(args[1], nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrValue
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if v, err := c.db.BExpire(args[0], duration); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(v)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bexpireAtCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 2 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// when, err := ledis.StrInt64(args[1], nil)
|
|
|
|
// if err != nil {
|
|
|
|
// return ErrValue
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if v, err := c.db.BExpireAt(args[0], when); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(v)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bttlCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 1 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if v, err := c.db.BTTL(args[0]); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(v)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func bpersistCommand(c *client) error {
|
|
|
|
// args := c.args
|
|
|
|
// if len(args) != 1 {
|
|
|
|
// return ErrCmdParams
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if n, err := c.db.BPersist(args[0]); err != nil {
|
|
|
|
// return err
|
|
|
|
// } else {
|
|
|
|
// c.resp.writeInteger(n)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// return nil
|
|
|
|
// }
|
|
|
|
|
|
|
|
// func init() {
|
|
|
|
// register("bget", bgetCommand)
|
|
|
|
// register("bdelete", bdeleteCommand)
|
|
|
|
// register("bsetbit", bsetbitCommand)
|
|
|
|
// register("bgetbit", bgetbitCommand)
|
|
|
|
// register("bmsetbit", bmsetbitCommand)
|
|
|
|
// register("bcount", bcountCommand)
|
|
|
|
// register("bopt", boptCommand)
|
|
|
|
// register("bexpire", bexpireCommand)
|
|
|
|
// register("bexpireat", bexpireAtCommand)
|
|
|
|
// register("bttl", bttlCommand)
|
|
|
|
// register("bpersist", bpersistCommand)
|
|
|
|
// }
|