forked from mirror/ledisdb
heel use iterator to multi find and delete
This commit is contained in:
parent
c5af770387
commit
9e09e607c8
|
@ -252,7 +252,7 @@ func (db *DB) HMget(key []byte, args ...[]byte) ([]interface{}, error) {
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
|
func (db *DB) HDel(key []byte, args ...[]byte) (int64, error) {
|
||||||
t := db.hashTx
|
t := db.hashTx
|
||||||
|
|
||||||
var ek []byte
|
var ek []byte
|
||||||
|
@ -262,6 +262,9 @@ func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
|
||||||
t.Lock()
|
t.Lock()
|
||||||
defer t.Unlock()
|
defer t.Unlock()
|
||||||
|
|
||||||
|
it := db.db.NewIterator()
|
||||||
|
defer it.Close()
|
||||||
|
|
||||||
var num int64 = 0
|
var num int64 = 0
|
||||||
for i := 0; i < len(args); i++ {
|
for i := 0; i < len(args); i++ {
|
||||||
if err := checkHashKFSize(key, args[i]); err != nil {
|
if err := checkHashKFSize(key, args[i]); err != nil {
|
||||||
|
@ -270,9 +273,8 @@ func (db *DB) HDel(key []byte, args [][]byte) (int64, error) {
|
||||||
|
|
||||||
ek = db.hEncodeHashKey(key, args[i])
|
ek = db.hEncodeHashKey(key, args[i])
|
||||||
|
|
||||||
if v, err = db.db.Get(ek); err != nil {
|
v = it.Find(ek)
|
||||||
return 0, err
|
if v == nil {
|
||||||
} else if v == nil {
|
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
num++
|
num++
|
||||||
|
|
|
@ -59,7 +59,7 @@ func hdelCommand(c *client) error {
|
||||||
return ErrCmdParams
|
return ErrCmdParams
|
||||||
}
|
}
|
||||||
|
|
||||||
if n, err := c.db.HDel(args[0], args[1:]); err != nil {
|
if n, err := c.db.HDel(args[0], args[1:]...); err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
c.writeInteger(n)
|
c.writeInteger(n)
|
||||||
|
|
Loading…
Reference in New Issue