forked from mirror/ledisdb
fix SAdd logic
This commit is contained in:
parent
54a686277d
commit
572a8f2c9a
|
@ -139,10 +139,6 @@ func (db *DB) sIncrSize(key []byte, delta int64) (int64, error) {
|
|||
db.rmExpire(t, SetType, key)
|
||||
} else {
|
||||
t.Put(sk, PutInt64(size))
|
||||
//FIXME
|
||||
if err := t.Commit(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -189,22 +185,32 @@ func (db *DB) SAdd(key []byte, args ...[]byte) (int64, error) {
|
|||
t.Lock()
|
||||
defer t.Unlock()
|
||||
|
||||
var err error
|
||||
var ek []byte
|
||||
var num int64 = 0
|
||||
for i := 0; i < len(args); i++ {
|
||||
member := args[i]
|
||||
if err := checkSetKMSize(key, member); err != nil {
|
||||
if err := checkSetKMSize(key, args[i]); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if n, err := db.sSetItem(key, member); err != nil {
|
||||
ek = db.sEncodeSetKey(key, args[i])
|
||||
|
||||
if v, err := db.db.Get(ek); err != nil {
|
||||
return 0, err
|
||||
} else if n == 1 {
|
||||
} else if v == nil {
|
||||
num++
|
||||
}
|
||||
|
||||
t.Put(ek, nil)
|
||||
}
|
||||
|
||||
err := t.Commit()
|
||||
if _, err = db.sIncrSize(key, num); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
err = t.Commit()
|
||||
return num, err
|
||||
|
||||
}
|
||||
|
||||
func (db *DB) SCard(key []byte) (int64, error) {
|
||||
|
|
|
@ -82,21 +82,18 @@ func TestDBSet(t *testing.T) {
|
|||
|
||||
db.SAdd(key1, member1, member2)
|
||||
|
||||
// tx := db.setTx
|
||||
|
||||
// if n := db.sDelete(tx, key1); n != 2 {
|
||||
// t.Fatal(n)
|
||||
// }
|
||||
|
||||
if n, err := db.SClear(key1); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n != 2 {
|
||||
t.Fatal(n)
|
||||
}
|
||||
|
||||
db.SAdd(key2, member1, member2)
|
||||
db.SAdd(key1, member1, member2)
|
||||
db.SAdd(key2, member1, member2, []byte("xxx"))
|
||||
|
||||
if n, _ := db.SCard(key2); n != 3 {
|
||||
t.Fatal(n)
|
||||
}
|
||||
if n, err := db.SMclear(key1, key2); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n != 2 {
|
||||
|
|
Loading…
Reference in New Issue