forked from mirror/ledisdb
add lclear, hclear,zclear to del
This commit is contained in:
parent
15a273ae52
commit
3ed4e9fc57
|
@ -183,6 +183,21 @@ func hvalsCommand(c *client) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hclearCommand(c *client) error {
|
||||||
|
args := c.args
|
||||||
|
if len(args) != 1 {
|
||||||
|
return ErrCmdParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := c.app.hash_clear(args[0]); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
c.writeInteger(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
register("hdel", hdelCommand)
|
register("hdel", hdelCommand)
|
||||||
register("hexists", hexistsCommand)
|
register("hexists", hexistsCommand)
|
||||||
|
@ -195,4 +210,8 @@ func init() {
|
||||||
register("hmset", hmsetCommand)
|
register("hmset", hmsetCommand)
|
||||||
register("hset", hsetCommand)
|
register("hset", hsetCommand)
|
||||||
register("hvals", hvalsCommand)
|
register("hvals", hvalsCommand)
|
||||||
|
|
||||||
|
//ledisdb special command
|
||||||
|
|
||||||
|
register("hclear", hclearCommand)
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,4 +212,15 @@ func TestHashGetAll(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("hclear", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 3 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("hlen", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 0 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,6 +129,21 @@ func lrangeCommand(c *client) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func lclearCommand(c *client) error {
|
||||||
|
args := c.args
|
||||||
|
if len(args) != 1 {
|
||||||
|
return ErrCmdParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := c.app.list_clear(args[0]); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
c.writeInteger(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
register("lindex", lindexCommand)
|
register("lindex", lindexCommand)
|
||||||
register("llen", llenCommand)
|
register("llen", llenCommand)
|
||||||
|
@ -137,4 +152,9 @@ func init() {
|
||||||
register("lpush", lpushCommand)
|
register("lpush", lpushCommand)
|
||||||
register("rpop", rpopCommand)
|
register("rpop", rpopCommand)
|
||||||
register("rpush", rpushCommand)
|
register("rpush", rpushCommand)
|
||||||
|
|
||||||
|
//ledisdb special command
|
||||||
|
|
||||||
|
register("lclear", lclearCommand)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,4 +282,19 @@ func TestPop(t *testing.T) {
|
||||||
} else if n != 0 {
|
} else if n != 0 {
|
||||||
t.Fatal(n)
|
t.Fatal(n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.Do("rpush", key, 1, 2, 3, 4, 5)
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("lclear", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 5 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("llen", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 0 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,6 +440,21 @@ func zrevrangebyscoreCommand(c *client) error {
|
||||||
return zrangebyscoreGeneric(c, true)
|
return zrangebyscoreGeneric(c, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func zclearCommand(c *client) error {
|
||||||
|
args := c.args
|
||||||
|
if len(args) != 1 {
|
||||||
|
return ErrCmdParams
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := c.app.zset_clear(args[0]); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
c.writeInteger(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
register("zadd", zaddCommand)
|
register("zadd", zaddCommand)
|
||||||
register("zcard", zcardCommand)
|
register("zcard", zcardCommand)
|
||||||
|
@ -455,4 +470,8 @@ func init() {
|
||||||
register("zrevrank", zrevrankCommand)
|
register("zrevrank", zrevrankCommand)
|
||||||
register("zrevrangebyscore", zrevrangebyscoreCommand)
|
register("zrevrangebyscore", zrevrangebyscoreCommand)
|
||||||
register("zscore", zscoreCommand)
|
register("zscore", zscoreCommand)
|
||||||
|
|
||||||
|
//ledisdb special command
|
||||||
|
register("zclear", zclearCommand)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -474,4 +474,17 @@ func TestZSetRange(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("zclear", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 2 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if n, err := redis.Int(c.Do("zcard", key)); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if n != 0 {
|
||||||
|
t.Fatal(n)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,3 +300,28 @@ func (a *App) hash_values(key []byte) ([]interface{}, error) {
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *App) hash_clear(key []byte) (int64, error) {
|
||||||
|
sk := encode_hsize_key(key)
|
||||||
|
|
||||||
|
t := a.hashTx
|
||||||
|
t.Lock()
|
||||||
|
defer t.Unlock()
|
||||||
|
|
||||||
|
start := encode_hash_start_key(key)
|
||||||
|
stop := encode_hash_stop_key(key)
|
||||||
|
|
||||||
|
var num int64 = 0
|
||||||
|
it := a.db.Iterator(start, stop, leveldb.RangeROpen, 0, -1)
|
||||||
|
for ; it.Valid(); it.Next() {
|
||||||
|
t.Delete(it.Key())
|
||||||
|
num++
|
||||||
|
}
|
||||||
|
|
||||||
|
it.Close()
|
||||||
|
|
||||||
|
t.Delete(sk)
|
||||||
|
|
||||||
|
err := t.Commit()
|
||||||
|
return num, err
|
||||||
|
}
|
||||||
|
|
|
@ -289,3 +289,33 @@ func (a *App) list_index(key []byte, index int32) ([]byte, error) {
|
||||||
|
|
||||||
return a.db.Get(encode_list_key(key, seq))
|
return a.db.Get(encode_list_key(key, seq))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *App) list_clear(key []byte) (int64, error) {
|
||||||
|
mk := encode_lmeta_key(key)
|
||||||
|
|
||||||
|
t := a.listTx
|
||||||
|
t.Lock()
|
||||||
|
defer t.Unlock()
|
||||||
|
|
||||||
|
metaKey := encode_lmeta_key(key)
|
||||||
|
headSeq, tailSeq, _, err := a.list_getMeta(metaKey)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var num int64 = 0
|
||||||
|
it := a.db.Iterator(encode_list_key(key, headSeq),
|
||||||
|
encode_list_key(key, tailSeq), leveldb.RangeClose, 0, -1)
|
||||||
|
for ; it.Valid(); it.Next() {
|
||||||
|
t.Delete(it.Key())
|
||||||
|
num++
|
||||||
|
}
|
||||||
|
|
||||||
|
it.Close()
|
||||||
|
|
||||||
|
t.Delete(mk)
|
||||||
|
|
||||||
|
err = t.Commit()
|
||||||
|
return num, err
|
||||||
|
}
|
||||||
|
|
|
@ -445,3 +445,7 @@ func (a *App) zset_range(key []byte, min int64, max int64, withScores bool, offs
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *App) zset_clear(key []byte) (int64, error) {
|
||||||
|
return a.zset_remRange(key, MinScore, MaxScore, 0, -1)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue